Hallo,
du kommst von Delphi, nicht wahr? Unter .NET heißt das Ereignis selbst TextChanged, mit OnTextChanged wird eine Methode bezeichnet, die das Ereignis auslöst.
Ein EventHandler (also das, was du beim Aufruf der Klasse mit += anhängst) muss immer so deklariert werden:
C#-Quelltext
1:
| ... XxxChanged(object sender, EventArgs e) |
Dabei kann auch eine Erweiterung von EventArgs benutzt werden.
sender ist immer (!) der Auslöser des Ereignisses, bei dir also vermutlich die Instanz deiner Klasse. Damit hast du zwei Möglichkeiten:
1. Abfragen, wer der
sender ist (also welche Instanz von TestClass), und dessen Wert abfragen; der Wert Value muss natürlich als Eigenschaft (ggf. readonly) zur Verfügung gestellt werden.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void StringChanged(object sender, EventArgs e) { TestClass current = sender as TestClass; if (current != null) { MessageBox.Show(current.Value); } } |
2. Eine
Ableitung von EventArgs erstellen, die den aktuellen Wert des Textes enthält (analog dazu, wie bei den Mouse-Ereignissen X,Y zur Verfügung gestellt werden). Dann kann der Text direkt mit e.Value ausgelesen werden.
In beiden Fällen muss die Methode OnStringChanged
innerhalb deiner Klasse aufgerufen werden immer dann, wenn sich der Text ändert - je nachdem mit "leeren" EventArgs (Variante 1) oder mit speziellem StringEventArgs (Variante 2).
Siehe in der
SDK-Doku/MSDN/Hilfe unter
Auslösen von Ereignissen.
Gruß Jürgen
PS. Für die Markierung von Code gibt es in der ComboBox unter "Bereiche" die Auswahl C#. Bitte benutze in der Regel dies. (Code ist gedacht für Pseudo-Code und für Fälle, für die keine besondere Syntax registriert ist.)
PS 2 (um 12:29 Uhr): Ich hoffe, es ist dir bewusst, dass
Strings unter .NET unveränderlich sind ("Referenztypen mit dem Verhalten eines Wertetypen"). Jegliche Änderung eines Strings führt zum Umkopieren im Arbeitsspeicher. Ich könnte mir vorstellen, dass dein Vorgehen dich dazu verleitet, diese Eigenheit zu nutzen und damit das System stärker zu belasten als sinnvoll.