Autor Beitrag
MarcinD
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows 7 Ultimate (64Bit)
VS2008 Prof. - C#
BeitragVerfasst: Di 23.11.10 07:02 
Hallo zusammen,

ich bin was OOP angeht noch ein echter Rookie. Ich habe das Prinzip verstanden, aber leider verstehen sich Theorie und die Praxis nicht immer so, wie ich das will.

Ich habe eine Textbox, die von einer "Master-Textbox" abgeleitet wird. In dieser Textbox definiere ich Sachen, wie das "nicht erklingen des Beep" bei Enter und das "automatische weiterspringen ins nächste Feld (wie TAB) mit Enter".

Diese Textbox habe ich auf einem Form mit einem Speichern Button, der beim Start inaktiv ist. Sobald an der Daten was geändert wird, soll dieser aktiv werden und das Formular soll den Status "Daten geändert" bekommen.

Im Moment löse ich das so (direkt im Formular):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        
   private void btnSpeichern_aktivieren(bool Aktivieren)
   {
      //Aktivieren der Speichern Schaltfläche 
      this.btnSpeichern.Enabled = Aktivieren;
      this.locboolgeaendert = Aktivieren;
   }

   private void tbBenutzer_TextChanged(object sender, EventArgs e)
   {
       //Ändern Status der Speichern Schaltfläche
       this.btnSpeichern_aktivieren(true);
   }


Das doofe ist, dass ich dieses für jede Textbox machen muss, die auf dem Formular ist. Dies ist unübersichtlich und umständlich. Wie kann ich der Textbox in der "Master-Version" sagen, dass Sie das automatisch machen soll und auf dem Formular, auf dem sie gelegt wir automatisch diese Eigenschaft ändert?

Geht sowas überhaupt?

Danke und Gruß

Martin
Necaremus
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 203
Erhaltene Danke: 18

Win > XP, Vista, 7; Android 2.1
C# > VS '08,'10; Delphi7
BeitragVerfasst: Di 23.11.10 09:28 
du kannst ein event mehreren textboxen zu weisen.
guck einfach im designer unter dem TextChanged-Event und gebe da einfach deinen textboxen dieses event an.

du könntest es sicherlich auch direkt im code lösen (indem du mit ner foreach deine controls durchratterst und deinen textboxen so das event zuweist), wäre denke ich für den anfang aber etwas zu overkill :)

_________________
[Master of dangerous sciolism].
"Never assume malice when stupidity will suffice." Hanlon's Razor
-= Some people see the glass half full. Others see it half empty. I see a glass that's twice as big as it needs to be. =-

Für diesen Beitrag haben gedankt: MarcinD
MarcinD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Windows 7 Ultimate (64Bit)
VS2008 Prof. - C#
BeitragVerfasst: Di 23.11.10 09:48 
user profile iconNecaremus hat folgendes geschrieben Zum zitierten Posting springen:
du kannst ein event mehreren textboxen zu weisen.
guck einfach im designer unter dem TextChanged-Event und gebe da einfach deinen textboxen dieses event an.


Oh verdammt. :oops:

Manchmal ist eine einfach Lösung so nah. Da hätte ich auch selber drauf kommen können. Aber manchmal steht man sich selber und der Zwang nach Standalisierung im Wege.

Aber nur interesseshalber:
Kann man die Objekte auf der Form, wo die abgeleitete Klasse drauf liegt, in der Klasse, von der abgeleitet wird, ansprechen. (geiler Satz :lol: Wenn ich mich mit Kommas verhauen hab = Sry dafür)
LSanchez
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26
Erhaltene Danke: 8



BeitragVerfasst: Di 23.11.10 12:35 
Mit FindForm bekommst Du die Form, auf der Das Objekt ist.

Gruß

Luis Sanchez

Beispiel:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
private void button2_Click(object sender, EventArgs e)
{
      // Get the form that the TextBox control is contained within.
      Form myForm = textBox1.FindForm();
      // Set the text and color of the form containing the TextBox.
      myForm.Text = "The Form of My Control";
      myForm.BackColor = Color.Red;
            
}