Announcement

Collapse
No announcement yet.

TextBox Highlight

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TextBox Highlight

    Hallo!

    Ich programmiere noch nicht lange mit C# und deswegen habe ich mal ne Frage an euch!

    Ich möchte alle Controls oder eher gesagt Textboxen auf meiner Form ermitteln und dann halt festlegen, wenn eine Textbox den Focus erhält soll sie eine andere Hintergrundfarbe bekommen. Ich hatte es mal mit ner "switch-Anweisung" probiert aber das ist bei 20 Textboxen eher unvorteilhaft und ich habe halt nach den Namen jeweils gesucht, aber ich wollte es gerne allgemein halten und es vielleicht in einer Klasse schreiben zur Weiterbenutzung für andere Forms z.B.!

    Nun zu meiner Frage: Habt vielleicht einer von euch ein Beispiel dazu?

    Wie würdet ihr denn da ansetzen (auch eine neue Klasse schreiben usw.?)?

    Ich hoffe ihr könnt mir ein wenig weiterhelfen!

    MfG

    Echo

  • #2
    Hallo,

    als Ansatz würde ich sagen, Du markierst alle Eingabefähigen Komponenten auf dem Formular und legt für alle die ENTER- bzw LEAVE-Eigenschaft fest.

    Bei einem "ENTER" also wenn du die Komponente betrittst legst du eine neue Hintergrundfarbe fest.
    Bei einem !LEAVE", also wenn du die Komponente verläßt kannst du die alte Hintergrundfarbe wieder festlegen.

    vieleicht mal als Ansatz gedacht.

    cu Jan

    Comment


    • #3
      Hallo,

      als Ergänzung zu Jans Vorschlag: Es könnte ja für einzelne Controls ein spezielles Enter-/Leave-Ereignis nötig werden. Deshalb könnte man für Multicast-Ereignisse im Konstruktor nach InitializeComponents() das Standardereignis allgemein zuordnen:
      Code:
      TextBox tb;
      foreach(Control ctl in this.Controls) {
          if (ctl is TextBox) {
              tb = ctl as TextBox;
              tb.Enter += new EventHandler(this.StandardEntering);
              tb.Leave += new EventHandler(this.StandardLeaving);
          }
      }
      So klappt es noch nicht, weil nur die Controls der obersten Ebene des Formulars erreicht werden und nicht alle; deshalb müsste rekursiv vorgegangen werden. Aber vielleicht erläutert es das Prinzip.

      Hoffe, ich konnte helfen. Jürgen

      Comment


      • #4
        Vielen Dank erstmal für eure Antworten!

        Ich habe jetzt alle TextBoxen und MaskedTextBoxen ermittelt (klappt!) und möchte mir nun testweise beim Enter-Ereignis eine MessageBox ausgeben, was noch nicht so richtig klappt!

        Code:
        private ArrayList GetControls(Control ctrl)
        {
        
          ArrayList arl = new ArrayList();
        
          if (ctrl.HasChildren) 
           {
                foreach ( Control childCtrl in ctrl.Controls )
                arl.AddRange(GetControls(childCtrl));
           }
        
          arl.AddRange(ctrl.Controls);
        
          return arl;
        }
        Nachdem InitializeComponent() habe ich diesen Code eingefügt:
        Code:
        TextBox tb;
        foreach(Control ctl in GetControls(this))
         {
            if (ctl is TextBox) 
            {
                tb = ctl as TextBox;
                tb.Enter += new EventHandler(this.StandardEntering);
                tb.Leave += new EventHandler(this.StandardLeaving);
            }
        }
        Nun das Ereignis in dem ich einen Fehler bekomme:
        Code:
        public void StandardEntering (object sender, EventArgs e)
        {
            TextBox tb;
            MessageBox.Show(tb.Name.ToString());
        }
        Der Fehler lautet: Verwendung der nicht zugewiesenen lokalen Variablen "tb"

        Ich hoffe ihr könnt mir vielleicht noch einmal helfen!

        MfG

        Echo

        Comment

        Working...
        X