从打开的表单2发送值到表单1

时间:2015-11-28 08:40:47

标签: c# forms winforms

很抱歉,我知道这个问题,或者类似的问题经常被问到,但是由于我已经通过不同的主题,我只是不知道如何将它应用到我的程序中。

这是我的情况: 在表格1中,我有一个标签。这是一个打开表格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中的标签不会改变......

任何想法? 感谢

3 个答案:

答案 0 :(得分:0)

在表单的构造函数中,您可以获得如下值:

在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();

答案 1 :(得分:0)

解决方案1:

在Form1中:

    public Form1()
    {
        InitializeComponent();
    }

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

表格2中的代码:

        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是一个Field。

答案 2 :(得分:0)

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

  

解决方案一:

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

表单1:

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" (在“属性”和“行为”下)

表单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();
    }
}