Entwickler-Ecke

C# - Die Sprache - 9 Rich Textboxen - Vererbung


ChrisHa - Mo 02.12.13 12:01
Titel: 9 Rich Textboxen - Vererbung
Hallo,

ich habe 9 Richtextboxen auf einer Oberfläche und würden diesen 9 gerne exakt die selbe Eigenschaft verpassen:
Wenn man in diese klickt soll sich die Hintergrundfarbe der Textbox ändern.


C#-Quelltext
1:
2:
3:
4:
        private void rTxt_hoch_mittel_Leave(object sender, EventArgs e)
        {
            rTxt_hoch_mittel.BackColor = Color.LightGray;
        }

An sich bei einer Textbox sehr leicht.


Nun meine Frage:
Es erben doch sicherlich alle Textboxen irgendwo von einer "Main" - Textbox und diese muss man doch verändern können, so dass sich all diese danach richten können. Wenn das der Fall ist, kann man das so leicht ändern?

Mein weiterer Lösungsgedanke:
Eine Klasse zu erstellen, die solche Werte vorgibt und dann quasi nur noch von der Textbox aufgerufen wird. Problem: Die Textboxen haben natürlich alle unterschiedliche Namen.


Vielen Dank für Eure Hilfe.

Moderiert von user profile iconTh69: Quote- durch C#-Tags ersetzt


Ralf Jansen - Mo 02.12.13 12:25

Zitat:
Es erben doch sicherlich alle Textboxen irgendwo von einer "Main" - Textbox und diese muss man doch verändern können, so dass sich all diese danach richten können. Wenn das der Fall ist, kann man das so leicht ändern?


Vekehrt herum gedacht. Wenn du eine TextBox hast die schon ungefähr das macht was du möchtest dann leite von dieser Textbox ab und benutze dann diese abgeleitete TextBox da wo du die zusätzlichen Features brauchst.

In deinem Fall also von der RichTextBox ableiten und, wenn ich deinen Codeausschnitt vertstehe möchtest du solange das Control den Focus hat eine andere Hintergrundfarbe, OnEnter und OnLeave überschreiben und zusätzlich zum Eventaufruf halt die BackColor setzen.


ChrisHa - Mo 02.12.13 12:56

Prinzipiell glaube ich hast du mich richtig verstanden.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        private void rTxt_mittel_wenig_Leave(object sender, EventArgs e)
        {
            rTxt_mittel_wenig.BackColor = Color.LightGray;
        }

        private void rTxt_mittel_mittel_Leave(object sender, EventArgs e)
        {
            rTxt_mittel_mittel.BackColor = Color.LightGray;
        }

        private void rTxt_mittel_hoch_Leave(object sender, EventArgs e)
        {
            rTxt_mittel_hoch.BackColor = Color.LightGray;
        }


So wie ich das verstehe, könnte ich jetzt sagen, dass die zwei unteren RichTextBoxen die Werte von der oberen mit nehmen und das obwohl die Namen anders sind?
Durch einen einfach Aufruf geht das doch nicht oder stehe ich jetzt grade etwas auf dem Schlauch?

Moderiert von user profile iconTh69: Quote- durch C#-Tags ersetzt


Th69 - Mo 02.12.13 13:57

Hallo ChrisHa :welcome:

du kannst auch allen Controls dieselbe Ereignismethode geben (Im 'sender' steht dann das auslösende Control drin):

C#-Quelltext
1:
2:
3:
4:
5:
6:
private void rTxt_Leave(object sender, EventArgs e)
{
    Control control = sender as control;
    if (control != null)
        control.BackColor = Color.LightGray;
}


P.S: Bitte C#-Tags anstatt Quote-Tags für C#-Code verwenden, danke.


ChrisHa - Mo 02.12.13 14:14

Hallo und danke für das Welcome,

ok und wie ist dann der Aufruf? Oder werden die Werte hierbei alle DIREKT in das Object geschrieben, wie eine Art Refernz?

Edit:
Wenn ja haben doch so gut wie alle meine Buttons oder Textboxen diesen Sender (habe nicht nur die 9 RichTextBoxen)


Gruß

Chris


Ralf Jansen - Mo 02.12.13 15:08

Leave ist ein Event und der EventHandler, z.B. die rTxt_Leave Methode, wird nur von den Controls aufgerufen die auch diesen Event registriert haben. Du entscheidest also z.b. im Winformsdesigner welches Controls diesen EventHandler aufrufen sollen. Nur weil du im Methodennamen Leave unterbringst wird das nicht plötzlich von allen aufgerufen.


ChrisHa - Mo 02.12.13 15:34

Vielen Dank für die ganzen Antworten.

Ich werde mich mal in das Thema Controls einlesen.