有一個私人無效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