Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从类调用表单中的事件_C# - Fatal编程技术网

C# 从类调用表单中的事件

C# 从类调用表单中的事件,c#,C#,嗨,有没有一种方法可以从一个与该窗体无关的类中调用窗体中的按钮单击事件?如果您可以抓住按钮本身(例如,通过询问窗体的控件集合等),您可以调用。我想说这通常是个坏主意。如果表单想让您执行特定的操作,它应该将其公开为公共或内部方法,然后从单击处理程序调用该方法。MVP模式就是为这种分离而设计的。这与@Jon Skeet在其响应中所述类似,但执行代码与类分离 public class Presenter { public void DoStuff() {}; } public MyForm

嗨,有没有一种方法可以从一个与该窗体无关的类中调用
窗体中的
按钮单击事件

如果您可以抓住按钮本身(例如,通过询问
窗体
控件
集合等),您可以调用。我想说这通常是个坏主意。如果表单想让您执行特定的操作,它应该将其公开为公共或内部方法,然后从单击处理程序调用该方法。

MVP模式就是为这种分离而设计的。这与@Jon Skeet在其响应中所述类似,但执行代码与类分离

public class Presenter
{
     public void DoStuff() {};
}

public MyForm : Form
{
     private Presenter presenter;
     public MyForm()
     {
        presenter = new Presenter();
     }

     private void OnButtonClick(object sender, EventArgs e)
     {
         presenter.DoStuff();
     }
}

现在您可以调用click处理程序,但将表单保留在调用路径之外。

在类声明中,我有一个方法ButtonClick,该方法将从ButtonClick事件的表单中调用

class Myclass
{
    public Myclass()
    {

    }

    public void ButtonClick(object sender, EventArgs e)
    {
        MessageBox.Show("Button Click");
    }
}  
在from中,您可以为按钮分配事件:

Myclass c= new Myclass();
        button1.Click += new EventHandler(c.ButtonClick);

是的,我想我一直在向窗体请求类中的控件。我甚至不能称之为表单。@belinq:那么你有什么信息,为什么你不能用优雅的方式做事?你为什么不能改一下表格?如果你能给我们提供更多的背景,那会很有帮助的。