【问题标题】:Sending a value from opened form 2 to form 1将打开的表格 2 中的值发送到表格 1
【发布时间】:2023-03-23 03:48:01
【问题描述】:

对不起,我知道这个问题,或者类似的问题经常被问到,但是由于我经历了不同的线程,我只是不知道如何将它应用到我的程序中。

这是我的情况: 在表格 1 中,我有一个标签。有一个按钮可以打开 Form 2,它有单选按钮和一个按钮。表单 2 中的按钮应该从单选按钮发送一个字符串值到表单 1 中的 label.Text。我该怎么做呢?

所以,下面是打开表格 2 的内容。

private void selectkeyButton_Click(object sender, EventArgs e)
{
    selectKeyboard sk = new selectKeyboard();
    sk.ShowDialog();
}

在表格 2 中,这是我目前所拥有的:

public Form1 otherForm = new Form1();
string hotkey = "";

public void hotkeyChanged(object sender, EventArgs e)
{

    RadioButton rr = (RadioButton)sender;       
    switch (rr.Name)
    {
         case ("buttonF1"):
             hotkey = "F1 ";
             break;
    }            
}

public void buttonConfirmKey_Click(object sender, EventArgs e)
{
     hotkey = otherForm.keyLabel.Text;
     this.Close();
}

我有public Form1 otherForm = new Form1(); 还有hotkey = otherForm.keyLabel.Text;我找到了here.

它似乎不起作用,因为当我按下 form2 上的按钮时,表单关闭但 form1 中的标签没有改变......

有什么想法吗? 谢谢

【问题讨论】:

  • 其他问题怎么没有给你你需要的?实例化新表单而不是引用原始表单是一个常见的错误。您正在代码public Form1 otherForm = new Form1(); 中创建一个新表单。您需要将原始Form1 的引用传递给新的Form2
  • 与其直接从form2设置标签,不如使用form2的结果。所以你可以ShowDialog你的form2,如果结果是DialogResult.OK,使用选择值(你应该将它存储在form2的属性中)在form1中设置标签文本。

标签: c# forms winforms


【解决方案1】:

有不同的方法可以做到这一点。你可以这样:

解决方案一:

(在这种情况下,不要忘记将 label1 的修饰符设置为 Public。您可以在设计器选项 > 属性 > 设计下进行设置)

表格一:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(this);
        frm.Show();
    }
}

表格 2:

public partial class Form2 : Form
{
    private readonly Form1 _parent;

    public Form2(Form1 parent)
    {
        InitializeComponent();
        _parent = parent;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        _parent.label1.Text = textBox1.Text;
        Close();
    }
}

解决方案 2

不要将 label1 设置为 public,而是将其保留为私有(默认),但将表单 2 上 button1 的 DialogResult 属性设置为“DialogResult OK”(在 Properties > Behavior 下)

表格 1:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        DialogResult res = frm.ShowDialog();
        if (res == DialogResult.OK)
        {
            label1.Text = frm.MyNewText;
        }
    }
}

表格 2:

public partial class Form2 : Form
{
    public string MyNewText;

    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MyNewText = textBox1.Text;
        Close();
    }
}

【讨论】:

  • 谢谢!这完美!但是你能解释一下使用_parent和parent的部分吗?
  • @AlvinTang 还添加了第二个解决方案。 _parent 在这种情况下是表单 1 的实例,因此您可以访问所有公共属性。
  • 嗯,好的,知道了,谢谢。我更喜欢你的第一个解决方案,因为我可以更容易理解,谢谢。
【解决方案2】:

在表单的构造函数中,你可以得到这样的值:

在 form2 中,您应该添加这样的构造函数:

public partial class Form2: Form
{
    public string _newvalue
    public Form2(string value)
    {
        InitializeComponent();
        _newvalue=value
    }
//you should assign the value to the label .
}

在 form1 中你应该这样做:

form2 new=form2("sampletext");
new.showdialog();

【讨论】:

    【解决方案3】:

    解决方案 1:

    在表格 1 中:

        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2(this);
            f.ShowDialog();
        }
    

    Form2 中的代码:

            Form frm_;
    
            public Form2(Form frm)
            {
                InitializeComponent();
                frm_ = frm;
            }
    
            private void btnInForm2_Click(object sender, EventArgs e)
            {
                Label lbl = (Label)frm_.Controls.Find("lblInForm1", true)[0];
    
                string PassVal="What you want";
                lbl.Text = PassVal;
            }
    

    解决方案 2:

    在表格 1 中:

    Form2 f = new Form2();
    if (f.ShowDialog() == DialogResult.OK)
    {
        lblInForm1.Text = f.PassVal;
    }
    

    在表格 2 中:

    internal string PassVal = "";
    

    PassVal 是一个字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多