有一个私人无效btnContBalloon_Click(对象发件人,EventArgs e)。我可以使这个静态,因为我想从静态方法调用,但我不能。使btn_Click事件静态
0
A
回答
4
让事件静止是拍摄脚部的好方法。静态事件具有无限的生命周期。这使得您为事件注册的任何事件处理程序都可以永远活着。这使得包含这样一个事件处理程序的任何表单都可以永远存在。泄漏。
注册一个静态事件的事件处理程序需要代码,例如,显式取消注册该处理程序的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
是的,如果该方法不需要封闭类的实例成员,那么可以使其成为静态。如果这是真正的问题,则什么都不能阻止事件处理程序变为静态。
底线:如果该方法仅使用发送对象(可能的按钮)和事件参数或其他静态成员,那么这是非常有效的和可能的。
0
一般情况:是的,可以将事件处理程序设为静态。但是静态方法的正常规则适用。
但是,当您将自动生成的事件处理程序更改为静态时,自动生成的代码通常会遇到麻烦。我只会用手动添加事件处理程序来完成此操作。
相关问题
- 1. C#中如何创建对象在Btn_click事件中创建另一个Btn_Click
- 2. C# - 非静态类的静态事件
- 3. 设置静态事件使用反射
- 4. vb.net c#静态事件?
- 5. C#发布静态事件
- 6. 静态类中的静态事件访问表单控件
- 7. C#静态事件处理程序与非静态事件处理程序
- 8. 静态事件如何与C#中的非静态事件进行比较?
- 9. 静态事件试图声明非静态实例
- 10. java静态与非静态使用此和事件处理程序
- 11. 发件人静态事件处理事件
- 12. HTML元素上的静态事件附件和动态事件附件
- 13. 静态文本的点击事件
- 14. C#textbox1_keydown事件与“静态”变量
- 15. 使用Backbone View组件注册静态UI元素事件
- 16. Aspx Calendar:Page_Load和Btn_Click中的SelectedDate
- 17. 静态事件处理程序和非静态事件处理程序之间有什么区别
- 18. 在事件处理程序中使用静态方法
- 19. 在一个静态事件中使用WeakEventManager
- 20. 事件元数据:使用“name”属性的静态变量?
- 21. 如何使用带有静态事件的Observable.FromEvent?
- 22. 在静态方法和静态事件处理程序之间共享数据
- 23. 静态文件
- 24. 为静态按钮动态分配事件的好处
- 25. 使用静态或非静态类
- 26. 不能使静态方法非静态
- 27. 静态文件状态'404
- 28. 控件的事件到外部静态类的方法
- 29. Django静态文件
- 30. 静态html文件
但你不应该从上下文从事件处理不同的调用的事件处理程序,为什么不给里面调用刚才的逻辑? – Restuta
同意。我也会对这个用例感兴趣。虽然我猜想可以通过将相关代码抽取到静态方法中并从事件处理函数和第二个(静态)上下文中调用相关代码来改进设计。 –
@restuta调用逻辑内部不起作用,所以它是必要的 – Harikrishna