我正在设置一个.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文件中没有为其分配事件处理程序。
而且,抱歉英语不好,这不是我的母语。
我该怎么办? 谢谢!
答案 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()
方法位于您调用它的同一个项目中,则会遇到同样的问题。