我有一個UserControl包含3個標籤。我想爲它添加一個事件,當其中一個標籤的文本發生變化時發生。
我使用Visual Studio 2010如何將事件添加到C#中的UserControl?
回答
首先,您需要在您的類中(旁邊的方法和構造函數)聲明的事件:
public event EventHandler LabelsTextChanged;
然後您需要創建一個方法來處理單個標籤的TextChanged
事件。
private void HandleLabelTextChanged(object sender, EventArgs e)
{
// we'll explain this in a minute
this.OnLabelsTextChanged(EventArgs.Empty);
}
某處,可能在你控制的構造函數,你需要訂閱標籤的TextChanged
事件。
myLabel1.TextChanged += this.HandleLabelTextChanged;
myLabel2.TextChanged += this.HandleLabelTextChanged;
myLabel3.TextChanged += this.HandleLabelTextChanged;
現在爲HandleLabelsTextChanged
方法。我們可以直接提出LabelsTextChanged
;但是,.NET框架設計準則說,創建一個受保護的虛擬方法來爲我們提高事件是最佳做法。這樣,繼承類可以通過重寫OnEventName
方法來「處理」事件,這比訂閱事件的性能要好一些。即使你認爲你永遠不會重寫方法,但最好養成這樣做的習慣,因爲它簡化了事件提升過程。
這裏是我們的OnLabelsTextChanged
:
protected virtual void OnLabelsTextChanged(EventArgs e)
{
EventHandler handler = this.LabelsTextChanged;
if (handler != null)
{
handler(this, e);
}
}
我們必須檢查空,因爲沒有用戶的事件爲null。如果我們試圖提出一個空事件,我們會得到一個NullReferenceException
。請注意,我們將事件的EventHandler
複製到局部變量,然後檢查它是否爲null並引發事件。如果我們這樣做是這樣的:
if (this.LabelsTextChanged != null)
{
this.LabelsTextChanged(this, e);
}
我們將有無效檢查和事件引發之間的競爭條件。如果事件的訂閱者恰好在我們提出事件之前取消訂閱,但是在我們檢查了null之後,就會拋出異常。你通常不會遇到這個問題,但最好有養成安全寫作的習慣。
編輯:這裏是public event EventHandler LabelsTextChanged;
怎麼行應放在:
namespace YourNamespace
{
class MyUserControl : UserControl
{
// it needs to be here:
public event EventHandler LabelsTextChanged;
...
}
}
Here都在活動設計的進一步閱讀框架設計指南。
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);
}
}
它有一個編譯錯誤,wihch說:「期望的類,委託,枚舉,接口或結構」在第二行 它似乎有問題的「事件「 – Saeed 2010-08-15 06:30:15
首先,你應該在你的用戶控件聲明一個事件,例如:
public event EventHandler TextOfLabelChanged;
,那麼你必須打電話回叫綁定到你的活動功能(如果有任何)在runtime.You可以通過處理標籤的TextChanged事件這樣做:
public void LabelTextChanged(object sender,EventArgs e)
{
if(TextOfLabelChanged!=null)
TextOfLabelChanged(sender,e);
}
你可以有OBJE自己的EventArgs ct如果你喜歡。
地方在你的代碼,你應該結合您的標籤TextChanged事件這種方法是這樣的:
_myLabel.TextChanged+=LabelTextChanged;
編譯錯誤,它說:它似乎與「事件的問題,第二行「預期類,委託,枚舉,接口或結構」 ......
這2個不拘一格要在類的聲明。
public delegate void TextChangedEventHandler(object sender, EventArgs e);
public event TextChangedEventHandler LabelTextChanged;
您必須聲明Namespace
內event
和delegate
,嘗試將class
範圍內帶來的代碼,它將會運行得很好。
有一個非常簡單的方法來做到這一點!
在用戶控件形式:
- 更改屬性的公共訪問無處不
主要形式,你在哪裏使用用戶控件上:
1.5:在using
區域添加using userControl1=UserControl.userControl1
1.將'Laod'事件添加到您的UserControl:
this.userControl1.Load += new System.EventHandler(this.userControl1_Load);
2.In的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.In日label1_TextChanged:
private void label1_TextChanged(object sender, EventArgs e)
{
//do whatever you want
}
- 1. 如何將UserControl添加到其他UserControl?
- 2. 如何將DataContext添加到usercontrol的xaml?
- 3. 如何將事件添加到C#中的包裝類?
- 4. 將WPF UserControl添加到TaskPane
- 5. 將內容添加到UserControl
- 6. 將事件綁定到WPF中的UserControl
- 7. 如何將Dispose功能添加到C#UserControl?
- 8. 如何將Click事件添加到Ext.Img?
- 9. 如何將事件添加到URLLoader類?
- 10. 如何將OnClick事件添加到TCustomControl?
- 11. 如何將UserControl中的所有文本框添加到GridView中
- 12. iphone sdk:如何將事件添加到UIButton UIWebView中添加
- 13. 如何將usercontrol添加到由主頁面文件加載的aspx頁面中?
- 14. 動態添加UserControl到日曆控件的DayRender事件
- 15. 如何將UserControl有條件地添加到Repeater控制?
- 16. 如何將xaml頁面/ usercontrol添加到Windows窗體控件?
- 17. 如何將窗口添加到wpf中的usercontrol?
- 18. 用事件編程添加UserControl
- 19. 如何在C#中添加事件?
- 20. 如何將事件添加到剛剛添加的jQuery元素?
- 21. 如何爲我的UserControl添加KeyUp事件?
- 22. 使用XAML將控件添加到UserControl中的ItemsControl中
- 23. 如何在C#上創建時將事件添加到ImageButton?
- 24. 將事件添加到嵌套在Repeater ASP-C中的控件#
- 25. 如何將事件添加到Silverlight中的模板控件?
- 26. 如何將條件添加到$(window).resize jquery中的事件?
- 27. 將事件添加到jQuery
- 28. 將事件添加到WinForms?
- 29. 將事件添加到DataGridComboBoxColumn
- 30. 如何將UserControl事件用於MainWindow
您正在使用的WinForms或WPF? – 2010-08-15 05:55:32
我不知道,我使用UserControl,但不是WPF – Saeed 2010-08-15 06:22:03