2013-04-06 225 views
3

我設計自定義用戶控件。這個用戶控件包括: 文本框,複選框,按鈕。自定義用戶控件

現在我想要消耗我的項目中設計的用戶控件,但問題是我無法訪問文本框,複選框,按鈕EVENTS消費用戶控件在我的窗體中,並且只有EVENT用戶control.how可以我有可能在使用設計好的用戶控件時可以訪問每個對象事件?

回答

1

在您的用戶控件中將您的控件設置爲「文本框」Modifiers屬性爲Public .so當您將此用戶控件添加到您的表單時。您可以訪問到你的文本框中埃文斯:

public Form1() 
     { 
      InitializeComponent(); 
      userControl11.textBox1.TextChanged += new EventHandler(textBox1_TextChanged); 
     } 

     void textBox1_TextChanged(object sender, EventArgs e) 
     { 
      MessageBox.Show("user control textbox.text changed"); 
     } 
0

您可能需要爲您想要從外部訪問的控件的事件手動創建公共事件。

另一種方式是,在初始化用戶控件中的這些控件時,使用public而不是private(由VS自動生成),這些代碼應該位於xxx.Designer.cs中,它們看起來像private System.Windows.Forms.Button button1。然後可以通過MyUserControl.button1訪問。但是這樣做,整個控件都可以從您的用戶控件之外訪問,這對個人來說並不是很好。

0

我認爲你應該將公共事件添加到你的自定義控件類中,並在那裏進行訂閱和取消訂閱。就這樣:

public event EventHandler ComboboxClick 
{ 
    add { _combobox.Click += value; } 
    remove { _combobox.Click -= value; } 
} 

欲瞭解更多信息,請參閱http://msdn.microsoft.com/en-us/library/8627sbea(v=vs.71).aspx

編輯:我不會推薦設置您的自定義控制,公共屬性的內部控制,因爲它違反了封裝原則。你設計自己的控制來做一些特定的工作,控制的客戶應該不知道它的內部組成。如果您將來更改控件的內部組成(例如,切換到某個第三方文本框控件),則只需對自定義控件類進行更改,並且其客戶端仍可正常工作,就好像沒有任何事情發生一樣。這裏的a good koan關於封裝=)