如何以不同的形式订阅活动c#

时间:2015-09-15 17:04:18

标签: c# winforms events

我需要一些帮助来连接两个窗体。我需要的是,当按下表单2中的按钮时,表单一会激活某种方法吗?我尝试过使用事件,但我无法使用它。

3 个答案:

答案 0 :(得分:0)

public class Form1
{
   private Form2 form2;


   public Form1(Form2 frm2)
   {
      form2 = frm2;
      form2.ButtonClicked += button_clicked
   }

   public void button_clicked(object sender, EventArgs e)
   {
    frm1btn_click(null, null);
   }

}

public class Form2
{
   public event EventHandler ButtonClicked;

   Public Form2()
   {

   }

   public void frm2btn_click(object sender, EventArgs e)
   {
      if(buttonClicked != null)
      {
         buttonClicked(null, null);
      }
   }
}

public class main
{
   public static void main(string[] args)
   {
      Form2 form2 = new Form2();
      Form1 form1 = new Form1(form2);
   }
}

这是您活动的基本理念。当form2中的按钮单击时,触发您的事件。确保form1正在监听事件(即+ =行)。

您的主要方法应该实例化两种形式。

另请注意,这不是最佳做法。表单在彼此之间触发事件的情况并不常见,而且您很可能需要基础模型架构。

如果有代码,这也会更完整。

答案 1 :(得分:0)

不是试图处理按钮的Click事件(你可以简单地做),而是更好地在按钮的Click事件处理程序中调用其他窗体的方法:

  • 您应该引用其他形式来调用其方法。
  • 其他形式的方法应该是公开的。

代码形式2:

//You should set form1Instance=... somewhere in code
Form1 form1Instance;

public void button1_Click(object sender, EventArgs e)
{
    //....
    form1Instance.Method1();    
}

Form1中的代码:

Public void Method1()
{
    //...
}

答案 2 :(得分:0)

您可以使用 MVVM Light 的概念。 MVVM Light的Messenger组件可以轻松地在类之间传递数据。

按照以下步骤操作:

1)点击 form2 中的按钮,然后编写如下代码:

// Sends a message with a Student object.
var student = new Student{ FirstName = "Gul", LastName = "Ershad" };
Messenger.Default.Send(student);

2)接收来自 form2 的传入消息至 form1 ,并编写如下代码:

// Registers for incoming Student messages.
Messenger.Default.Register<Student>(this, (student) =>
{
    // Works with the Student object.
});

请阅读以下链接中的详细信息。它非常强大的类消息传递概念。

[MVVM Light][1]