使btn_Click事件静态

时间:2009-12-23 11:57:07

标签: c# .net winforms

有一个私有void btnContBalloon_Click(对象发送者,EventArgs e)。我可以使这个静态,因为我想从静态方法调用它,但我不能。

3 个答案:

答案 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)

一般来说:是的,可以使事件处理程序变为静态。但是静态方法的常规规则适用。

但是,当您将自动生成的事件处理程序更改为静态时,自动生成的代码通常会遇到麻烦。我只使用手动添加的事件处理程序。