C# C# Event Args in TextBox (Form1) ausgeben - Wie ?

antaro

Cadet 3rd Year
Registriert
Sep. 2012
Beiträge
41
Hallo,

ich beschäftige mich gerade mit dem Thema "Delegates und Events".
Das Beispiel unten habe ich verstanden. Die Ausgabe der Args erfolgt jedoch
im Consolen-Fenster. Wie kann ich aber den String mit den ---> Args
in einer Textbox (Form1) ausgeben ?

Danke.

Leider geben alle Event-Beispiele, von denen ich lerne, im Consolenfenster aus.



Code:
namespace Metronom2
{

    public class TimeOfTick : EventArgs
    {
        private DateTime TimeNow;
        public DateTime Time
        {
            get
            {
                return this.TimeNow;
            }
            
            set
            {
                TimeNow = value;
            }
        }
    
          
    }
    
    
    public class Metronome
    {
        public event TickHandler Tick;
        public delegate void TickHandler(Metronome m, TimeOfTick e);
        
        public void Start()
        {
            for (int i=0;i<5;i++)
            {
                System.Threading.Thread.Sleep(2000);
                if (Tick != null)
                {
                    TimeOfTick TOT = new TimeOfTick();
                    TOT.Time = DateTime.Now;                    
                    Tick(this, TOT);
                    
                }
            }
        }
    } 

    public class Listener
    {
        public void Subscribe(Metronome m)
        {
            m.Tick += new Metronome.TickHandler(HeardIt);
        }
        private void HeardIt(Metronome m, TimeOfTick e)
        {
---->       Console.WriteLine("HEARD IT AT {0}", e.Time);
            
        }

    }

    
}



Form1
.
.
.

 private void btn_Start_Click(object sender, EventArgs e)
        {
            Metronome m = new Metronome();
            Listener l = new Listener();
            l.Subscribe(m);
            m.Start();
            
        }
 
Zuletzt bearbeitet:
Du überschreibst den Constructor vom Listener so, dass er eine Variable vom Typ Form1 erwartet, legst dafür eine KlassenVariable in Listener an und greifst über diese Variable auf das gewünschte Steuerelement zu.

​Wahrscheinlich gibt es bessere Lösungen. Das wäre jedenfalls das, was ich probieren würde.
 
Zuletzt bearbeitet:
Danke. Ich werde es probieren. Werde morgen hier berichten.

Ich habe schon mal in einem Delegates-Beispiel (welches auch nur auf Console ausgibt) eine public string variable
in der Klasse definiert und gefüllt, welche die erste Methode enthält, die bei der Instanzierung des Delegate als Argument verwendet wird. Funktioniert auch.
Aber, ich dachte, dass ist nicht im Sinne der Kapselung, da die Variable ausserhalb der Methode steht.

Gruß
antaro
 
Zuletzt bearbeitet:
Ich würde das mit Data Binding machen. Das ist jedenfalls dafür vorgesehen, um Daten zwischen GUI und Businesslogik auszutauschen. Siehe auch MVVM-Pattern.

Im Prinzip erstellst du ein EventArgs-Property, dass die EventArgs enthalten soll. Per Data Binding verknüpfst du dann das Property mit zB dem Text- oder Value-Property eines GUI-Elements. Im EventHandler lässt du dann einfach nur den Inhalt des EventArgs-Property ändern. Die GUI bekommt durch das Data Binding automatisch mit, dass sie sich aktualisieren muss.

Schau einfach mal in der MSDN rum, Microsoft hat sich sehr viel Mühe mit der Dokumentation der ganzen API gegeben: http://msdn.microsoft.com/en-us/library/ms754356.aspx
 
Zuletzt bearbeitet: (Typo)
e-Laurin schrieb:
Im Prinzip erstellst du ein EventArgs-Property, dass die EventArgs enthalten soll. Per Data Binding verknüpfst du dann das Property mit zB dem Text- oder Value-Property eines GUI-Elements. Im EventHandler lässt du dann einfach nur den Inhalt des EventArgs-Property ändern. Die GUI bekommt durch das Data Binding automatisch mit, dass sie sich aktualisieren muss.

Vielen Dank ! Ich probiere es aus. Muss mich nun in das Thema Datenbindung an Textboxen einlesen. Bisher habe ich Datenbindung nur für Grids genutzt.
 
Zurück
Oben