C# - dll 事件处理程序

C# - dll event handler

我正在设置一个 .dll 文件来创建一个新表单和一个新按钮,但我希​​望该按钮能够执行某些操作。是否可以在 dll 文件中创建事件处理程序?

public static byte sbuton( string er, int by,int re)
{
    Form fg = new Form();
    fg.Show();
    Button b1 = new Button();
    fg.Controls.Add(b1);
    b1.Text = er;
    b1.Location = new Point(by, re);
    return 0;
}

这是创建带有按钮的表单的代码。 当我尝试创建一个新的事件处理程序时,就像我在表单中所做的那样,我收到此错误:"An object reference is required for the non-static field, method or property".


  public static byte sbuton( string er, int by,int re)
    {
        Form fg = new Form();
        fg.Show();
        Button b1 = new Button();
        fg.Controls.Add(b1);
        b1.Text = er;
        b1.Location = new Point(by, re);
        b1.Click += new EventHandler(b1_click);
    }</p>

<p>private void b1_click(object sender , EventArgs e)
    {
    }
</pre>
这是我想要使用 dll

的表单中的代码


private void button1_Click(object sender, EventArgs e) 
{
if (richTextBox1.Text.Contains("add") && richTextBox1.Text.Contains("buton") && richTextBox1.Text.Contains("text"))
    {
        form.sbuton("buton", 10, 10);
    }
}
</pre>
这将创建一个按钮,但单击该按钮时不会发生任何事情,因为在 .dll 文件中没有为其分配事件处理程序。
另外,抱歉英语不好,这不是我的母语。

我能做什么? 谢谢!

从你的问题中看不出上下文是什么。没有 a good, minimal, complete code example 很难提供真正好的答案。

但在您的示例中,您的事件处理程序似乎与 sbuton() 方法位于同一个 DLL 中(我假设是同一个 class)。如果是这种情况,那么为了使用事件处理程序,您需要做的就是将其设为 static 方法:

private static void b1_click(object sender , EventArgs e)
{
}

现在,由于您没有 post 方法中的任何代码,更不用说完整的上下文,不确定是否可行。 IE。如果该方法是非静态方法有充分的理由,那么您将必须通过引用该方法并引用包含的 实际实例 来订阅事件处理程序class。如果是这样的话,那么评论者 Daniel Kelley 建议的问题 An object reference is required for the non-static field, method, or property? 最终可能适合您的需求。


最后,请注意其中的 none 与 DLL 中的代码有关。如果您的 sbuton() 方法在您调用它的同一个项目中,您将 运行 遇到同样的问题。