2013-03-20 13 views
5

Mam problem z projektantem VS2012. Mam zaprojektowaną przeze mnie kontrolę użytkownika, w której znajduje się pole tekstowe (między innymi), w którym użytkownik ma wprowadzić IPv4, IPv6 lub DNS. Musiałem potwierdzić ten tekst jako ważny (zdarzenie TextChanged) z powrotem do głównego programu. Rozważmy następujący kod:C# Zaprojektowany nie rozpoznaje niestandardowego zdarzenia w niestandardowej kontroli użytkownika

private bool addressError; 

public EventHandler ErrorChanged; 

public bool Error 
{ 
    get 
    { 
     return addressError; 
    } 
    set 
    { 
     if (this.Error != value) 
     { 
      addressError = value; 
      OnErrorChanged(this, EventArgs.Empty); 
     } 
    } 
} 

protected virtual void OnErrorChanged(object sender, EventArgs e) 
{ 
    if (ErrorChanged != null) 
    { 
     ErrorChanged(sender, e); 
    } 
} 

Potem dodać obsługi zdarzeń do głównego projektanta programu (nazwa sterowania jest „Com”):

this.Com.ErrorChanged += new System.EventHandler(this.Com_ErrorChanged); 

Problem mam to, że mimo że kod działa dokładnie tak jak chciałem, projektant myśli, że nie ma zdarzenia ErrorChanged. Dokładna wiadomość zgłasza to

„«ModbusCom.Communications»typ ma zdarzenie o nazwie «ErrorChanged».”

Mogę zignorować błąd i projektant wyświetla formularz OK. Mogę uruchomić program i wszystko jest w porządku, ale trochę denerwujące jest powtarzanie tego, aby zignorować problem. Czy jest coś, co mogę zrobić, żeby to rozwiązać? Pomoc jest doceniana!

+0

Czy rzeczywiście próbuje komunikować się przez Modbus? (Właśnie się zastanawiam) –

+0

Tak, jestem. Modbus RTU przez TCP/IP –

Odpowiedz

7

Nie jesteś deklarując ją jako zdarzenie

Zmiana:

public EventHandler ErrorChanged; 

do:

public event EventHandler ErrorChanged; 
+2

Daniel jest poprawny. To, co robisz, nie używając słowa kluczowego event, tworzy instancję delegata EventHandler, który jest polem publicznym. To działałoby w zasadzie w ten sam sposób w kodzie C#, ale pozwoliłoby to na zastąpienie wszystkich programów obsługi zdarzeń, które subskrybują ten kod, jeśli nie używasz + = lub - = do subskrybowania lub wypisania subskrypcji. Słowo kluczowe zdarzenia pozwala tylko dodać (+ =) lub usunąć (- =) na samym zdarzeniu. –

+1

ah facepalm. Dziękuję bardzo. –

Powiązane problemy