UFO ET IT

Usercontrol에서 이벤트를 만들고 Main Form에서 처리하는 방법은 무엇입니까?

ufoet 2020. 12. 6. 22:23
반응형

Usercontrol에서 이벤트를 만들고 Main Form에서 처리하는 방법은 무엇입니까?


사용자 지정 사용자 컨트롤이 있고 비교적 간단한 작업을하고 싶습니다.

해당 사용자 컨트롤의 값에서 숫자 위아래가 변경 될 때마다 기본 양식이 표시 창을 업데이트하도록합니다.

NUD가 사용자 컨트롤에 있지 않은 경우 문제가되지 않지만 이벤트를 사용자 컨트롤이 아닌 메인 폼에서 처리하는 방법을 알아낼 수없는 것 같습니다.


사용자 정의 컨트롤 내에서 이벤트가 시작될 때 발생하는 사용자 정의 컨트롤에 대한 이벤트 처리기를 만들어야합니다. 이렇게하면 양식에서 이벤트를 처리 할 수 ​​있도록 이벤트를 체인 위로 버블 링 할 수 있습니다.

Button1UserControl을 클릭 하면 폼에서 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 
}

매핑 해보십시오. 이 코드를 귀하의 UserControl:

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

그러면 일반적으로 컨트롤 과 함께 표시 UserControl되는 ValueChanged이벤트가 표시됩니다 NumericUpDown.


이렇게 할 수 있습니다 ..... 아래 예제는 텍스트 상자 (사용자 제어) 값이 변경된 것을 보여줍니다.

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

쉬운 방법 중 하나는 다음과 같은 문제없이 landa 함수를 사용하는 것입니다.

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

참고 URL : https://stackoverflow.com/questions/7880850/how-do-i-make-an-event-in-the-usercontrol-and-have-it-handled-in-the-main-form

반응형