有一个私有void btnContBalloon_Click(对象发送者,EventArgs e)。我可以使这个静态,因为我想从静态方法调用它,但我不能。
答案 0 :(得分:5)
让事件保持静止是射击脚的好方法。静态事件具有无限的生命周期。这使得您注册参加活动的任何活动处理程序也将永远存在。这使得任何包含这样的事件处理程序的表单也永远存在。泄漏。
为静态事件注册事件处理程序需要代码,例如,显式取消注册处理程序的FormClosing事件处理程序。您可以在MSDN Library文章中明确记录SystemEvents类,这是.NET框架中具有静态事件的类的少数示例之一。
更好的方法是跟踪应激活按钮的Click事件的表单实例。像这样:
public partial class Form1 : Form {
public static Form1 MainForm { get; private set; }
public Form1() {
InitializeComponent();
MainForm = this;
}
public void RunClickMethod() {
button1.PerformClick();
}
protected override void OnFormClosing(FormClosingEventArgs e) {
MainForm = null;
base.OnFormClosing(e);
}
}
允许客户端代码执行此操作:
Form1.MainForm.RunClickMethod();
答案 1 :(得分:2)
是的,如果该方法不需要封闭类的实例成员,则可以将其设置为静态。如果这是真正的问题,那么什么都不能阻止事件处理程序变为静态。
底线:如果该方法仅使用发送方对象(可能是按钮)和事件args 或其他静态成员,那么这是完全有效的。
答案 2 :(得分:1)
一般来说:是的,可以使事件处理程序变为静态。但是静态方法的常规规则适用。
但是,当您将自动生成的事件处理程序更改为静态时,自动生成的代码通常会遇到麻烦。我只使用手动添加的事件处理程序。