C# - dll事件处理程序

时间:2015-04-01 14:07:12

标签: c# events dll 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;
}

这是创建带有按钮的表单的代码。 当我尝试创建一个新的事件处理程序时,就像我在表单中一样,我得到了这个错误:"非静态字段,方法或属性需要一个对象引用"。


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

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

这是我想要使用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);
    }
}
这会创建一个按钮,但单击该按钮时没有任何反应,因为在.dll文件中没有为其分配事件处理程序。 而且,抱歉英语不好,这不是我的母语。

我该怎么办?  谢谢!

1 个答案:

答案 0 :(得分:1)

从你的问题中不清楚上下文是什么。没有a good, minimal, complete code example,很难提供一个非常好的答案。

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

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

现在,既然您没有在方法中发布任何代码,请不要介意完整的上下文,但不确定是否有效。即如果该方法是一个非静态方法的充分理由,则必须通过引用包含类的实际实例的方法来订阅事件处理程序。如果是这样的话,那么问题评论者丹尼尔凯利建议,An object reference is required for the non-static field, method, or property?可能最终证明适合您的需求。


最后,请注意,这些都与DLL中的代码无关。如果您的sbuton()方法位于您调用它的同一个项目中,则会遇到同样的问题。