Как создать событие в Usercontrol и обработать его в основной форме? - программирование
Подтвердить что ты не робот

Как создать событие в Usercontrol и обработать его в основной форме?

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

Когда когда-либо число с номером в этом значении usercontrol изменяется, обновите основную форму окна отображения.

Это не проблема, если NUD не был в usercontrol, но я не могу понять, как иметь событие, обрабатываемое основной формой, а не usercontrol.

4b9b3361

Ответ 1

Вам нужно создать обработчик событий для пользовательского элемента управления, который возникает при запуске события из пользовательского элемента управления. Это позволит вам пузырить событие вверх по цепочке, чтобы вы могли обработать событие из формы.

При нажатии Button1 на UserControl я запустил Button1_Click, который запускает UserControl_ButtonClick в форме:

Пользовательский контроль:

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);               
}

форма:

UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick);

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

Ответ 2

Попробуйте сопоставить его. Поместите этот код в свой UserControl:

public event EventHandler ValueChanged {
  add { numericUpDown1.ValueChanged += value; }
  remove { numericUpDown1.ValueChanged -= value; }
}

то ваш UserControl будет иметь событие ValueChanged, которое вы обычно видите с помощью элемента управления NumericUpDown.

Ответ 3

вы можете сделать так: ниже приведен пример изменения текстового поля (пользовательского контроля)

   // Declare a delegate 
public delegate void ValueChangedEventHandler(object sender, ValueChangedEventArgs e);
public partial class SampleUserControl : TextBox 
{    
    public SampleUserControl() 
    { 
        InitializeComponent(); 
    }

    // Declare an event 
    public event ValueChangedEventHandler ValueChanged;

    protected virtual void OnValueChanged(ValueChangedEventArgs e) 
    { 
        if (ValueChanged != null) 
            ValueChanged(this,e); 
    }    
    private void SampleUserControl_TextChanged(object sender, EventArgs e) 
    { 
        TextBox tb  = (TextBox)sender; 
        int value; 
        if (!int.TryParse(tb.Text, out value)) 
            value = 0; 
        // Raise the event 
       OnValueChanged( new ValueChangedEventArgs(value)); 
    }    
}

Ответ 4

один из простых способов сделать это - использовать функцию landa без каких-либо проблем, таких как

userControl_Material1.simpleButton4.Click += (s, ee) =>
            {
                Save_mat(mat_global);
            };