Entwickler-Ecke
WinForms - EventHandler für erzeugte RichTextBoxen hinzufügen
Csharp-programmierer - Sa 12.09.15 11:15
Titel: EventHandler für erzeugte RichTextBoxen hinzufügen
Hallo Leute :)
Ich habe keinerlei Erfahrung mit EventHendler. Ich erzeuge ja im laufe des Programms neue TabPages und RichTextBoxen, welche in ein Dictionary 'grspeichert' werden. Auf der Form (außerhalt der TabControl) befindet sich ein WebBrowser. Wenn sich nun der Text der RichTextBox ändert, soll der WebBrowser dies darstellen.
Mein Beispiel:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { var x = this.tabControl1.SelectedTab.Controls[0] as RichTextBox; if(x != null) { this.webBrowser1.DocumentText = x.Text; x.TextChanged += new EventHandler(aktualisieren); } }
private void aktualisieren(object sender, EventArgs e) {
} |
Ich brauche ja bei der Funktion
aktualisieren noch einen Parameter mit RichTextBox oder string, und nun stehe ich auf dem Schlauch.
Ich hoffe ihr versteht mich.
Mit freundlichen Grüßen :)
Ralf Jansen - Sa 12.09.15 11:32
Im Sender Parameter steht der Auslöser des Events ist also die RichTextBox.
Um an die nötigen Properties der RichTextBox zu kommen musst du den Sender noch auf RichTextBox casten um die zu verwenden.
Genauso wie du Controls[0] auf RichTextBox gecastet hast um die in deinem SelectedIndexChanged Event verwenden zu können.
Übrigens den Event so zu verdrahten ist ein Problem. Events sind sogenannte MulticastDelegaten heißt da können mehrere Methoden dranhängen nicht nur eine. Jedesmal wenn du also Event += MeinEventHandler machst fügst du eine weiter aufzurufende Methode hinzu. Da du bei jedem TabWechsel hinzufügst hast du jetzt den Fall das wenn du 3mal zum selben Tab gewechsel hast die Methode auch 3mal am Event hängt. Und bei einem ändern des Textes auch 3mal aufgerufen wird.
Du solltest den Event einfach 1mal am Anfang an die RichTextBoxen hängen und gut ist. Also zu dem Zeitpunkt wo du die RichTextBox erstellst.
Csharp-programmierer - Sa 12.09.15 11:46
Ich habe jetzt das += in ein = geändert. Nun wir x.TextChange unterstrichen.
Könnten Sie mir vielleicht ein Quellcode Beispiel schicken?
Ralf Jansen - Sa 12.09.15 11:55
Zitat: |
Ich habe jetzt das += in ein = geändert. Nun wir x.TextChange unterstrichen. |
Weil es so nicht geht ;) Ich versuchs nochmal mit anderen Worten. Ein Event entspricht einer Liste von Methoden und ein EventHandler ist eine Methode keine Liste von Methoden. Einer Liste kann man was hinzufügen oder wegnehmen. Aber du kannst nicht sagen die Liste von Methoden ist gleich Methode das macht keinen Sinn. Genausowenig wie du sagen kannst mein Integer Array ist gleich 5.
Zitat: |
Könnten Sie mir vielleicht ein Quellcode Beispiel schicken? |
Wenn es helfen würde könnte ich DIR Quellcode zeigen. Ich glaube aber das musst du gerade mal selbst probieren. Es ist nur eine ganz kleine Transferleistung. Du weißt schon wie du den EventHandler an den Event hängst. Du mußt den Code nur zu der Stelle verschieben wo du die RichTextBox erzeugst.
Csharp-programmierer - Sa 12.09.15 17:32
Ich habe es jetzt so gemacht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| MessageBox.Show(Form4.result); TabPage t = new TabPage(Path.GetFileName(Form4.result)); t.BorderStyle = BorderStyle.Fixed3D; t.BackColor = Properties.Settings.Default.backcolor_defauklt;
RichTextBox r = new RichTextBox(); r.ForeColor = Properties.Settings.Default.forecolor_default; r.BackColor = Properties.Settings.Default.backcolor_defauklt; r.Font = Properties.Settings.Default.font_default; r.Dock = DockStyle.Fill; r.WordWrap = Properties.Settings.Default.wordwrap; r.BorderStyle = BorderStyle.Fixed3D; r.TextChanged += new EventHandler(aktualisieren); |
Und die Methode:
C#-Quelltext
1: 2: 3: 4:
| private void aktualisieren(object sender, EventArgs e) { } |
Könnten Sie mir hier bitte weiterhelfen?
Mfg
Moderiert von
Th69: Beitragsformatierung überarbeitet.
FinnO - Sa 12.09.15 17:47
Moin,
wie bereits erwähnt:
Ralf Jansen hat folgendes geschrieben : |
Im Sender Parameter steht der Auslöser des Events ist also die RichTextBox. |
kriegst du die
RichTextBox als Parameter übergeben:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| private void aktualisieren(object sender, EventArgs e) { if (sender is RichTextBox) { RichTextBox refreshedTextBox = (sender as RichTextBox); } } |
Gruß
Csharp-programmierer - So 13.09.15 11:53
Vielen Dank für die Hilfreichen Antworten :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!