Autor Beitrag
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Sa 12.09.15 11:15 
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:
ausblenden 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[0as 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Sa 12.09.15 17:32 
Ich habe es jetzt so gemacht:

ausblenden 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); // <- hier eingefügt

Und die Methode:
ausblenden C#-Quelltext
1:
2:
3:
4:
private void aktualisieren(object sender, EventArgs e)
{
       //Ich brauche ja noch einen Parameter, in dem der Text enthalten ist
}


Könnten Sie mir hier bitte weiterhelfen?
Mfg

Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Sa 12.09.15 17:47 
Moin,

wie bereits erwähnt:
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Im Sender Parameter steht der Auslöser des Events ist also die RichTextBox.


kriegst du die RichTextBox als Parameter übergeben:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
private void aktualisieren(object sender, EventArgs e)
{
       //Ich brauche ja noch einen Parameter, in dem der Text enthalten ist
  if (sender is RichTextBox) 
  {
    RichTextBox refreshedTextBox = (sender as RichTextBox); 
    //...  
  }
}


Gruß

Für diesen Beitrag haben gedankt: Csharp-programmierer
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 13.09.15 11:53 
Vielen Dank für die Hilfreichen Antworten :)