web-dev-qa-db-ja.com

ユーザーコントロールでイベントを作成し、メインフォームで処理するにはどうすればよいですか?

カスタムユーザーコントロールがあり、比較的簡単なことをしたいです。

そのusercontrolの値が上下する数値が変わったときは、メインフォームに表示ウィンドウを更新させます。

NUDがユーザーコントロールにない場合、これは問題ではありませんが、ユーザーコントロールではなくメインフォームでイベントを処理する方法がわからないようです。

56
Crash893

ユーザーコントロール内からイベントが発生したときに発生するユーザーコントロールのイベントハンドラーを作成する必要があります。これにより、イベントをチェーンにバブルアップして、フォームからイベントを処理できるようになります。

UserControlでButton1をクリックすると、フォームで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 
}
120
James Johnson

マッピングしてみてください。このコードをUserControlに配置してください:

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

UserControlには、ValueChangedコントロールで通常表示されるNumericUpDownイベントが含まれます。

20
LarsTech

次のようにできます。

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

それを行う簡単な方法の1つは、ランダ関数を問題なく使用することです

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