2010-05-27 16 views
6

Düğme içeren bir kullanıcı denetimi oluşturdum. Bu denetimi, veri tabanından veri getirildikten sonra çalışma zamanında yüklenecek olan winformumda kullanıyorum.Kullanıcı denetimi için temsilci ve olay işleyicisiyle nasıl çalışılır

Şimdi o düğmenin Tıklat olayındaki bir veri tabanından bir satırı kaldırmam gerekiyor.

Sorun şu ki bu olayı formumda nasıl yakalarım. Şu anda bu kullanıcı kontrolünün btn tıklama olayı tanımlamasında gider.

cevap

18

Aşağıdaki durumlarda kullanıcı denetimi Aşağıdaki yaparak kendi temsilci etkinlik oluşturabilirsiniz:

protected void YourButton_Click(object sender, EventArgs e) 
{ 
    if (this.InnerButtonClick != null) 
    { 
     this.InnerButtonClick(sender, e); 
    } 
} 

Sonra içine kanca:

public event UserControlClickHandler InnerButtonClick; 
public delegate void UserControlClickHandler (object sender, EventArgs e); 

Aşağıdaki kullanarak işleyicisinden olay çağrı

UserControl.InnerButtonClick+= // Etc. 
+0

Güzel nick :), Biraz abt olabilir misiniz lütfen. Delegeler, olaylar ve Arayüzler hakkında pek bir şey bilmiyorum. Nasıl çalışır? Bir düğmenin tıklandığını nasıl anlayacak? –

+1

Temel olarak, bir temsilci yalnızca belirtilen işlevlere işaret eder. Delegeler çok noktaya yayın yaparlar, yani aynı anda birden fazla yönteme işaret edebilirler. Yani Temsilciyi bir kez çağırmak, tüm bağlı yöntemleri kovacaktır. Arayüzleri bu soruyla alakasız olarak açıklayan bir nokta yok, ama eğer bir arama yaparsanız, SO hakkında onlar hakkında çok fazla soru var. – GenericTypeTea

+0

Neden genel etkinlik int yazamıyorum funName; aslında olaylar tarafından kabul edilir? –

3

Yeni bir delegenin bildirilmesi gerekli değildir. te. Kullanıcı kontrolünüz:

public class MyControl : UserControl 
{ 
    public event EventHandler InnerButtonClick; 
    public MyControl() 
    { 
    InitializeComponent(); 
    innerButton.Click += new EventHandler(innerButton_Click); 
    } 
    private void innerButton_Click(object sender, EventArgs e) 
    { 
    if (InnerButtonClick != null) 
    { 
     InnerButtonClick(this, e); // or possibly InnerButtonClick(innerButton, e); depending on what you want the sender to be 
    } 
    } 
} 
+0

Bir yerde innerButton tanımına ihtiyacın yok mu? Bu bir parça eksik mi? – 1337Rooster

+0

InnerButtonClick bu satırda tanımlanmıştır: "public event EventHandler InnerButtonClick;" Özel bir olay işleyicisine ihtiyacınız yoksa, temel olanı yeniden tanımlamanıza gerek yoktur. –

İlgili konular