簡體   English   中英

自定義用戶控件

[英]custom user control

我在c#中設計了自定義用戶控件。此用戶控件包括:文本框,復選框,按鈕。

現在我想在我的項目中使用設計的用戶控件,但問題是我在表單中使用用戶控件時無法訪問文本框,復選框,按鈕事件,並且只有用戶控件的事件。我可以使它成為可能在使用設計的用戶控件時,每個對象事件都可以訪問?

在您的用戶控件中,當您將此用戶控件添加到表單時,將“text-box” Modifiers屬性的控件設置為Public .so。 你可以訪問你的文本框evens:

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

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

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

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

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

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

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

編輯:我不建議將自定義控件的內部控件設置為公共屬性,因為它違反了封裝原則。 你設計自己的控件來做一些特定的工作,控件的客戶應該不知道它的內部構成。 如果您將來更改控件的內部組合(例如,切換到某些第三方文本框控件),您只需要在自定義控件類中進行更改,並且其客戶端仍然可以正常工作,就好像什么也沒發生一樣。 這是一個關於封裝的好方法 =)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM