Получить событие от динамически добавленной кнопки в UserControl - PullRequest
0 голосов
/ 25 ноября 2011

Я хочу получить событие clicked для Button, которое находится в моем UserControl, и я добавляю это UserControl в мою форму динамически.Я хочу, чтобы событие было поднято в Form, в который я добавляю UserControl.Пожалуйста, если кто-нибудь может подсказать мне правильный путь, тогда это будет действительно очень полезно.

Ответы [ 4 ]

3 голосов
/ 25 ноября 2011

Вам необходимо представить событие в вашем пользовательском элементе управления, а затем подписаться на него, когда вы добавляете пользовательский элемент управления в форму. e.g.:

public partial MyUserControl:Control
{
   public event EventHandler ButtonClicked;
   private void myButtonClick(object sender, EventArgs e)
   {
      if (this.ButtonClicked != null)
         this.ButtonClicked(this, EventArgs.Empty);
   }
}

public partial MyForm:Form
{
   private void MethodWhereYouAddTheUserControl()
   {
       var myUC = new MyUserControl();
       myUC += myUC_ButtonClicked;
       // code where you add myUC to the form...
   }

   void myUC_ButtonClicked(object sender, EventArgs e)
   {
      // called when the button is clicked
   }
}
2 голосов
/ 25 ноября 2011

Я полагаю, вы используете Winforms со ссылкой на ваш заголовок.

Что вы можете сделать, чтобы переслать ваше Click событие.

Так что в ctor вашего UserControl

public class MyUserControl
{
    public event EventHandler MyClick;
    private void OnMyClick()
    {
        if (this.MyClick != null)
            this.MyClick(this, EventArgs.Empty);
    }
    public MyUserControl()
    {
        this.Click += (sender, e) => this.OnMyClick();
    }
}
0 голосов
/ 25 ноября 2011
  1. когда вы добавляете usercontrol к вашему form, зарегистрируйте событие щелчка (если оно public) usercontrol.button.Click += new EventHandler(usercontrolButton_Click);

  2. зарегистрируйте событие Click кнопки в вашем usercontrol

0 голосов
/ 25 ноября 2011

Добавьте свое собственное событие в свой пользовательский элемент управления.

В пользовательском пользовательском элементе управления после добавления кнопки также прикрепите свой (внутренний) обработчик событий, который затем будет вызывать ваше собственное общедоступное событие, чтобы сообщить обработчику событий, какая кнопка была нажата (скорее всего здесь нужен собственный делегат).

Как только это будет сделано, ваша форма может добавить свой собственный обработчик событий так же, как вы добавляете его в стандартные элементы управления.

Перечитывая ваш вопрос, это может быть не точная структура (кнопка исправлена, но пользовательский элемент управления динамически добавляется?). В любом случае, оно должно быть почти таким же, просто оно отличается в том месте, где / когда вы добавляете обработчик события при создании.


С помощью одной статической кнопки сделать это намного проще - при условии, что вы используете Windows Forms:

В вашем пользовательском элементе управления:

public event EventHandler ButtonClicked; // this could be named differently obviously

...

public void Button_OnClick(object sender, EventArgs e) // this is the standard "on button click" event handler created using the form editor
{
    if (ButtonClicked != null)
        ButtonClicked(this, EventArgs.Empty);
}

В вашей форме:

// create a new user control and add the event
MyControl ctl = new MyControl();
Controls.Add(ctl);
ctl.ButtonClicked += new EventHandler(Form_OnUserControlButtonClicked); // name of the event handler in your form that's called once you click the button

...

private void Form_OnUserControlbuttonClicked(object sender EventArgs e)
{
    // do whatever should happen once you click the button
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...