私はカスタムのusercontrolを持っていて、私は比較的簡単なことをしたい。Usercontrolでイベントを作成し、メインフォームにハンドリングさせるにはどうすればよいですか?
ユーザーコントロールの値が変更されたときに、メインフォームに表示ウィンドウを更新させるようにします。
NUDがユーザーコントロールにない場合は問題はありませんが、usercontrolではなくメインフォームによってイベントを処理する方法を把握できていないようです。
私はカスタムのusercontrolを持っていて、私は比較的簡単なことをしたい。Usercontrolでイベントを作成し、メインフォームにハンドリングさせるにはどうすればよいですか?
ユーザーコントロールの値が変更されたときに、メインフォームに表示ウィンドウを更新させるようにします。
NUDがユーザーコントロールにない場合は問題はありませんが、usercontrolではなくメインフォームによってイベントを処理する方法を把握できていないようです。
ユーザーコントロール内のイベントが発生したときに発生するユーザーコントロール用のイベントハンドラを作成する必要があります。これにより、フォームからイベントを処理できるように、イベントをチェーン上にバブリングすることができます。
ユーザーコントロール上のButton1
をクリックすると、私は、フォーム上のUserControl_ButtonClick
をトリガーButton1_Click
を発射ます:
ユーザーコントロール:
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
}
私は編集できませんが、 '' UserControl1.OnButtonClick''を '' UserControl1.ButtonClick''に変更しますか? –
非常に便利、thaks –
フォームのコードを編集してください: 'OnButtonClick'の代わりに' ButtonClick' – ThunderWiring
はそれをマッピングしてみます。あなたのUserControl
にこのコードを配置してみてください。
public event EventHandler ValueChanged {
add { numericUpDown1.ValueChanged += value; }
remove { numericUpDown1.ValueChanged -= value; }
}
、あなたのUserControl
はあなたが正常にNumericUpDown
制御で見るValueChanged
イベントを持っています。あなたは例の下.....次のように行うことができます
* new *キーワードはここでは使用しないでください。 –
は、テキストボックス(ユーザーコントロール)の値を示しているの
// 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));
}
}
可能重複変更(http://stackoverflow.com [Winformsのをユーザーがカスタムイベントを制御します]/questions/2188059/winforms-user-controls-custom-events) –