订阅按钮单击另一个表单

时间:2014-05-09 19:03:59

标签: c# event-handling eventargs

所以我有2个表单,需要将属性从一个表单传递给另一个表单。

在Form 1上我有一个方法

 private void rb_CheckedChanged(object sender, EventArgs e)
    {
        var frm2= new Form2();
        WorkComplete += frmSetNewTime.btnOk_Click;
        frmSetNewTime.Show();
    }

    private void WorkComplete(object sender, EventArgs e)
    {
     //   Property = Property from form 2
    }

在Form2上,我有一个名为btnOK_Click

的方法
public void btnOk_Click(object sender, EventArgs e)
    {
        Property = 5
     }

我的目标是将form2中的属性传递回form.1。

我无法订阅WorkComplete,因为它是一个方法组是我得到的错误。有没有人知道这样做的正确方法,或者可能是正确的语法?

2 个答案:

答案 0 :(得分:1)

试试这个:

public event OnWorkCompleted;

public void WorkComplete()
{
   if(OnWorkCompleted != null)
       OnWorkCompleted(Property, null);
}

在订阅者表格上:

Form1.OnWorkCompleted += Form1WorkCompleted;

public void Form1WorkCompleted(object sender, EventArgs e)
{
    var property = (int)sender;
    MessageBox.Show('hey form 1 property is ' + property.);
}

希望这有帮助。

答案 1 :(得分:1)

1)创建一个包含2个表单的新项目。

2)在Form2上,创建一个按钮。

3)在按钮的属性中,将修改器更改为内部。 通常,这是私有,这意味着只有Form2才能访问button1及其属性。将其更改为内部允许程序集中的任何类访问button1。如果您要将其更改为公开,您还可以允许您在项目中引用的库也访问button1。

4)在Form1上,在类中添加以下代码:

    Form2 frm;

    private void Form1_Load(object sender, EventArgs e)
    {
        // Create and show the form.
        frm = new Form2()
        frm.Show();

        // Assign the event handler for the button to a handler within this class.
        frm.button1.Click += this.Form2_button1_Click;
    }

    // This is the event handler that will run when you click the button on Form2.
    private void Form2_button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("You clicked the button on Form 2!");
        var frmProperty = frm.Property;
    }