Autor Beitrag
ChrisHa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 30

Win 7 x64
VS 2010, 2008
BeitragVerfasst: Mo 02.12.13 12:01 
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.

ausblenden 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
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: ChrisHa
ChrisHa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 30

Win 7 x64
VS 2010, 2008
BeitragVerfasst: Mo 02.12.13 12:56 
Prinzipiell glaube ich hast du mich richtig verstanden.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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):
ausblenden 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.

Für diesen Beitrag haben gedankt: ChrisHa
ChrisHa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 30

Win 7 x64
VS 2010, 2008
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: ChrisHa
ChrisHa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 30

Win 7 x64
VS 2010, 2008
BeitragVerfasst: Mo 02.12.13 15:34 
Vielen Dank für die ganzen Antworten.

Ich werde mich mal in das Thema Controls einlesen.