2011-10-24 26 views
49

Özel bir kullanıcı denetimim var ve nispeten basit bir şey yapmak istiyorum.Usercontrol'de bir Olayı nasıl yaparım ve Main Form'da el ile teslim aldım?

zaman hiç aşağı o UserControl'ın değer değişiklikleri sayısal yukarı, ana form güncelleştirme bir görüntüleme penceresi vardır. NUD bir usercontrol değildi ama mainform değil usercontrol tarafından ele olay anlamaya görünmüyor eğer

Bu bir sorun değildir.

+1

[Win kullanıcı özel etkinlikleri denetleyen] olası yinelenen (http://stackoverflow.com gösterir/questions/2188059/winforms-user-controls-custom-events) –

cevap

100

Kullanıcı denetimi içinden bir olay tetiklendiğinde yükseltilir kullanıcı kontrolü için bir olay işleyicisi oluşturmanız gerekir. Bu, etkinliği olaya zincirlemenizi sağlar, böylece olayı formdan işleyebilirsiniz.

UserControl Button1 tıklandığında, ben formda UserControl_ButtonClick tetikler Button1_Click ateş edeceğiz:

Kullanıcı kontrolü:

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

Form:

UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick); 

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

Düzenlemeyi yapamıyorum, ancak "UserControl1.OnButtonClick" işlevini "UserControl1.ButtonClick" olarak değiştirir misiniz? Formun kodunu düzenlemek lütfen –

+0

çok faydalı,: 'yerine ButtonClick'' OnButtonClick' –

+1

thaks – ThunderWiring

15

deneyin eşlemesi o. senin UserControl bu kodu yerleştirmeyi deneyin:

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

ardından UserControl normalde NumericUpDown kumanda ile bkz ValueChanged olay olacaktır.

+1

* Yeni * anahtar kelimesini burada kullanmayın. –

10
böyle yapabilirsiniz

..... Aşağıdaki örnekte metin kutusu (kullanıcı kontrolü) değeri

değişti
// 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)); 
    }  
}