Member 13423970 Ответов: 2

Как я могу вызвать событие из usercontrol в основную форму C#


Привет,

У меня есть userControl, и у меня есть кнопки там, я хотел бы вызвать событие click в моей основной форме.

Что я уже пробовал:

Есть то, что я пробовал, но это не работает в форме.

элемент управления UserControl
public event EventHandler ButtonClick;

        protected void Button1_Click(object sender, EventArgs e)
        {
            //bubble the event up to the parent
            if (this.ButtonClick != null)
                this.ButtonClick(this, e);
        }


Форма
<pre lang="c#">GameField.ButtonClick += new EventHandler(UserControl_ButtonClick);

        protected void UserControl_ButtonClick(object sender, EventArgs e)
        {
            //handle the event 
        }


Я не вижу класс userControl из основной формы. Это может быть потому, что у меня неполный класс.
public partial class GameField : UserControl

2 Ответов

Рейтинг:
1

Member 2524527

Не так просто, как общение между родителями и детьми. Чтобы обнаружить событие изменения размера из события MouseUp в кнопке в программно созданном пользовательском элементе управления я добавил следующий код в пользовательский элемент управления:

public event EventHandler SizeChanged;

        new protected virtual void OnSizeChanged(EventArgs e)
        {
            EventHandler eh = SizeChanged;
            if (eh != null)
            {
                eh(this, e);
            }
        }


В кнопке MouseUp я добавил
private void cmdResize_MouseUp(object sender, MouseEventArgs e)
        {
            ...
            EventArgs ef = new EventArgs();
            ...
            SizeChanged(sender,null);
        }


В форме, содержащей пользовательский элемент управления, код, создающий этот элемент управления, был
UserControl.UserControl NewControl = new UserControl.UserControl();
                ...
                UserControl.SizeChanged += new EventHandler(UserControl_SizeChanged);
                ParentForm.Add(UserControl);


и новая функция
void UserControl_SizeChanged(object sender, EventArgs e)
        {
            ...
        }


выполняется всякий раз, когда есть событие MouseUp в кнопке UserControl


Рейтинг:
0

OriginalGriff

Видеть здесь: Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^] - он основан на формах, но точно так же и с элементами управления (формы в любом случае являются производными от контроля!).