订阅另一个窗体中按钮的点击事件

3

我有两个表单并需要从一个表单传递属性到另一个表单。

在表单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
     }

我的目标是将表格2中的属性传回到表格1。
我不能订阅WorkComplete,因为我得到了一个方法组的错误。是否有人知道正确的方法或者正确的语法来做这件事呢?
2个回答

2

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

2) 在 Form2 中创建一个按钮。

3) 在按钮属性中,将 Modifier 更改为 Internal。 通常情况下,它是 Private,这意味着只有 Form2 可以访问 button1 及其属性。将其更改为 Internal 可以允许程序集内的任何类访问 button1。如果将其更改为 Public,还可以允许您引用项目中的库访问 button1。

4) 在 Class 中添加以下代码:

    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;
    }

我可以做到,我正在尝试从Form2传递一个属性到Form1。 - DidIReallyWriteThat
在这种情况下,您只需在类级别上定义frm,并在事件处理程序中引用它。我已经更新了答案来演示这一点。 - roncli

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.);
}

希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接