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()
方法在您调用它的同一个项目中,您将 运行 遇到同样的问题。
我正在设置一个 .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()
方法在您调用它的同一个项目中,您将 运行 遇到同样的问题。