2013-02-19 6 views
2

У меня есть User Control, содержащий кучу элементов управления. Я хочу установить событие по умолчанию этого User Control на событие Click одной из моих кнопок.Установить событие управления пользователя по умолчанию

Я знаю, что для установления события по умолчанию для одного из событий UserControl, я должен добавить атрибут:

[DefaultEvent("Click")] 
public partial class ucPersonSearch : UserControl 
... 

мне интересно, если это возможно, чтобы сделать что-то вроде:

[DefaultEvent("btn1_Click")] 
public partial class ucPersonSearch : UserControl 
... 

Я хочу для запуска некоторых методов в форме, в которой размещен этот элемент управления пользователя, в момент, когда btn1 кликнут.

Это действительно вязание в моем проекте, и вы получите ответ.

+0

??? Я понятия не имею, что вы пытаетесь сказать. –

ответ

7

Вы не можете раскрывать события своих членов класса вне класса. Как другие могут подписаться на событие ClickButton внутри вашего UserControl? Вы попробовали? Это невозможно, если вы не делаете кнопку доступной снаружи, что не очень хорошо (каждый может изменить все свойства).

Вы должны определить новое событие, и стреляйте новое событие, когда ваше желаемое событие (нажатие на кнопку) происходит:

[DefaultEvent("MyClick")] 
public partial class UCPersonSearch : UserControl 
{ 
    Button btnSearch; 
    public event EventHandler MyClick; 

    public UCPersonSearch() 
    { 
     btnSearch = new Button(); 
     //... 

     btnSearch.Click += new EventHandler(btnSearch_Click); 
    } 

    void btnSearch_Click(object sender, EventArgs e) 
    { 
     OnMyClick(); 
    } 

    protected virtual void OnMyClick() 
    { 
     var h = MyClick; 
     if (h != null) 
      h(this, EventArgs.Empty); 
    } 
} 
+0

Спасибо @ MD.Unicorn хорошая идея, перед тем как прочесть свой ответ, идея создания кнопки была подобрана, и это сработало. Ваш ответ тоже хорош, даже лучше. Хороший замок. –

+1

@MahdiTahsildari Ты знаешь, мой соотечественник :-) –

Смежные вопросы