我有一个包含3个標簽的UserControl.我想為其添加一个事件,该事件在其中一个標簽的文字更改時發生。
我正在使用Visual Studio 2010
最新回復
- 1月前1 #
- 1月前2 #
首先,應在使用者控制元件中宣告一个事件,例如:
public event EventHandler TextOfLabelChanged;
然後,您必须在執行時呼叫繫結到事件(如果有)的回撥函式。您可以通過處理標簽的TextChanged事件来做到這一點:
public void LabelTextChanged(object sender,EventArgs e) { if(TextOfLabelChanged!=null) TextOfLabelChanged(sender,e); }
如果愿意,您可以拥有自己的EventArgs物件。
在代碼中的某个位置,應將標簽TextChanged事件繫結到此方法,如下所示:
_myLabel.TextChanged+=LabelTextChanged;
- 1月前3 #
編譯錯誤,它在第二行顯示:"預期的類,委託,列舉,介面或結構"似乎与"事件..."有關。
這两行必须在類宣告的內部。
public delegate void TextChangedEventHandler(object sender, EventArgs e); public event TextChangedEventHandler LabelTextChanged;
- 1月前4 #
有一種非常簡單的方法!
在UserControl表單上:
將屬性更改為公開以在任何地方訪問
在使用UserControl的主窗體上:
.5:在
using
中 區域添加using userControl1=UserControl.userControl1
1。將" Laod"事件添加到您的UserControl中:
this.userControl1.Load += new System.EventHandler(this.userControl1_Load);
2。在userControl1_Load中:
private void userControl1_Load(object sender, EventArgs e) { (sender as UserControl1).label1.TextChanged += label1_TextChanged; //add a 'TextChanged' event to the label1 of UserControl1 OR use direct cast: ((UserControl1) sender).label1.TextChanged += label1_TextChanged; }
3。在label1_TextChanged中:
private void label1_TextChanged(object sender, EventArgs e) { //do whatever you want }
- 1月前5 #
public delegate void TextChangedEventHandler(object sender, EventArgs e); public event TextChangedEventHandler LabelTextChanged; // ... protected void MyTextBox_TextChanged(object sender, EventArgs e) { if (LabelTextChanged != null) { LabelTextChanged(this, e); } }
相似問題
- c#:同時播放两个声音c#winformsaudioplaybacksimultaneous2021-01-12 00:56
- C#winForms中的ToggleButtonc#winformsbutton2021-01-12 00:54
- c#:如何解決IE webBrowser控制元件中的記憶體洩漏?c#winformsmemoryleakswebbrowsercontrol2021-01-11 23:27
- c#:設置TabPage標頭颜色c#winformscolorsheadertabcontrol2021-01-11 04:59
- c#:PictureBox問题c#netwinformspicturebox2021-01-11 04:56
首先,您需要在類中宣告事件(以及方法和構造函式):
然後,您需要建立一種方法来處理各个標簽的
TextChanged
事件。在某个地方,可能在控制元件的構造函式中,您需要订阅標簽的
TextChanged
事件。現在為
HandleLabelsTextChanged
方法.我们可以养LabelsTextChanged
直; 但是,.NET框架設計指南指出,建立OnEventName
是最佳實践 受保護的虛擬方法来為我们引發事件.這樣,繼承類可以通過覆盖OnEventName
来"處理"事件 方法,結果比订阅事件要好一些.即使您认為您永远也不会超越OnEventName
方法,無論如何都要养成习惯,因為這可以簡化事件的产生過程。這是我们的
OnLabelsTextChanged
:我们必须檢查是否為空,因為没有订阅者的事件為空.如果我们尝試引發null事件,則会得到一个
NullReferenceException
.請註意,我们複製了事件的EventHandler
在檢查它是否為null並引發事件之前將其轉換為區域性變數.如果我们改為這樣做:我们將在無效檢查和事件引發之間有一个競爭條件.如果恰好發生在事件引發之前,但在我们檢查為空之後,事件的订阅者取消了订阅,則將引發異常.您通常不会遇到此問题,但是最好养成以安全方式編寫它的习惯。
Edit: 這就是
public event EventHandler LabelsTextChanged;
行應放置:以下是事件設計的框架設計指南,供您进一步阅讀。