Mehere Textboxen auf Inhalt prüfen C#

  • C#

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von newsletter.

    Mehere Textboxen auf Inhalt prüfen C#

    Moin

    Mehrere Textboxen (43Stück) auf Inhalt überprüfen, wie mache ich das in C# ?
    Wenn textbox leer = Backcolor Lightyellow, wenn befüllt oder wenn es befüllt wird = Weiss..

    Sowas:

    C#-Quellcode

    1. foreach (tb in {txt1.Text, txt2.Text, txt3.Text, txt4.Text})
    2. {
    3. if (String.IsNullOrEmpty(tb.Text))
    4. {
    5. tb.BackColor = System.Drawing.Color.LightYellow;
    6. }
    7. }


    Jede Textbox soll das gleiche machen: Gelb werden, wenn leer.
    Wenn es geht ohne Controls... ich kenne mich mit diesen nicht so aus :huh:
    Hi
    mach' es doch über das Validating bzw. Validated-Ereignis. Dort kannst du über ((Control)sender).BackColor = System.Drawing.Color.LightYellow die Farbe setzen.

    Ansonsten darfst du natürlich nicht txt1.Text verwenden, sondern musst txt1, usw. schreiben. Ansonsten listest du ja die Strings auf, nicht die TextBoxen.
    Übrigens musst du die Farbe auch wieder auf die ursprüngliche Farbe zurücksetzen.

    Viele Grüße
    ~blaze~
    Du warst nahe dran, so kann es funktionieren:

    C#-Quellcode

    1. var textBoxList = new List<TextBox> { txt1, txt2, txt3, txt4 };
    2. foreach (var tb in textBoxList)
    3. {
    4. if (String.IsNullOrEmpty(tb.Text))
    5. {
    6. tb.BackColor = System.Drawing.Color.LightYellow;
    7. }
    8. }


    Edit: Das Validation Event wäre natürlich noch schöner.
    Sind das alle TextBoxen? Oder nur ein Teil der Form?
    Edit: Was soll der Code machen? Oo

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    Sind das alle TextBoxen? Oder nur ein Teil der Form?
    Edit: Was soll der Code machen? Oo

    Grüße


    Es soll sicherstellen, dass alles ausgefüllt wird, was notwendig ist für die Word-Dokument-Erstellung.
    Ja, alle textboxen


    Es gibt zuerst folgende Auswahlmöglichkeiten:
    >>Produktauswahl/zu druckende Blätter

    >Textboxen mit den Mysql-Kundendaten autom. ausfüllen lassen (nur Kundennummer-Eingabe notwendig) & evtl. paar div. manuelle Angaben (z.B. verspätetes "Schreiben vom...", "Rechnungsnummer", "Fälligkeitsdatum...")
    >Textboxen manuell ausfüllen (z.B. wenn dieser in der Datenbank nicht enthalten ist)

    Diese Steuerelemente soll es gleich zu beginn gelb hervorheben, damit diese nicht vergessen gehen ;)
    Will da keine Messagebox aufpoppen lassen, welche nervend werden, wenn man das Programm 20x am Tag verwenden muss :D

    gibt es evtl. eine schönere möglichkeit, anstatt bei jeder Textbox ein "leave-Event" einzufügen?
    leave= wenn len(box1.Text > 0)
    {
    Back-Color = White;
    }

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „newsletter“ ()

    ~blaze~ schrieb:

    Hi
    mach' es doch über das Validating bzw. Validated-Ereignis. Dort kannst du über ((Control)sender).BackColor = System.Drawing.Color.LightYellow die Farbe setzen.

    Ansonsten darfst du natürlich nicht txt1.Text verwenden, sondern musst txt1, usw. schreiben. Ansonsten listest du ja die Strings auf, nicht die TextBoxen.
    Übrigens musst du die Farbe auch wieder auf die ursprüngliche Farbe zurücksetzen.

    Viele Grüße
    ~blaze~


    An diesem Punkt bin ich nun...
    Kann man eigentlich eine Private Void machen (1 Eventhandler) für mehrere Steuerelemente (z.B. Textboxen)?
    Habe es gerade mit mehrere Auswählen & Event auswählen versucht ... geht nicht ?(

    Sowas:

    C#-Quellcode

    1. private void Txtbox1, txtbox2, txtbox3, txtbox4_Validated(object sender, EventArgs e)
    2. {
    3. var textBoxList = new List<TextBox> { Txtbox1, txtbox2, txtbox3, txtbox4 };
    4. foreach (var tb in textBoxList)
    5. {
    6. if (len(String...(tb.Text) > 0)
    7. {
    8. tb.BackColor = System.Drawing.Color.White;
    9. }
    10. }


    So könnte ich das ganze in eine Private Void reinpacken ohne 43 Stk, was die übersicht erheblich einschränkt :S

    :S

    EDIT:\ rein Theoretisch sollte im sender stehen, welche Textbox gerade bearbeitet wird :huh:

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „newsletter“ ()

    ThuCommix schrieb:

    txt1.EventXyz += MyValidationEventHandler;
    txt2.EventXyz += MyValidationEventHandler;


    Aber wo packe ich den rein ?(

    eine Private Sub mit einem txt1.Eventxyz .... :S wie macht man sowas ?( bis jetzt habe ich meistens nur immer 1 ereignis/Event gehabt und dieser hat den Zustand von paar dingen verändert :/ Bei 43 Textboxen nicht wirklich so machbar :S
    Moin,

    Vielen Dank hat bestens geklappt!

    wie überprüfe ich aber eine MaskedTextBox?

    C#-Quellcode

    1. // --- Masket-Textbox-Liste ---
    2. var maskeTextBoxList = new List<MaskedTextBox> { MtxtDate, MtxtAktivierung, MtxtDate2, MtxtAufschaltdatum, MtxtDate3, MTxtDueDate };
    3. foreach (var mb in maskeTextBoxList)
    4. {
    5. if (String.IsNullOrEmpty(mb.Text))
    6. {
    7. mb.BackColor = System.Drawing.Color.LightYellow;
    8. }
    9. else
    10. {
    11. mb.BackColor = System.Drawing.Color.Green;
    12. }
    13. }


    funktioniert nicht... es sind auch die leeren (keine Zahlen enthalten) grün ... liegt das daran, das maskedtextboxen immer irgendwas enthalten haben?

    ?(
    Habe es auf die schnelle Dank ~blaze~'s Hilfe so gelöst:

    C#-Quellcode

    1. // --- Masket-Textbox-Liste ---
    2. var maskeTextBoxList = new List<MaskedTextBox> { MtxtDate, MtxtAktivierung, MtxtDate2, MtxtAufschaltdatum, MtxtDate3, MTxtDueDate };
    3. foreach (var mb in maskeTextBoxList)
    4. {
    5. if (mb.MaskCompleted)
    6. {
    7. mb.BackColor = System.Drawing.Color.White;
    8. }
    9. else
    10. {
    11. mb.BackColor = System.Drawing.Color.LightYellow;
    12. }
    13. }


    Naja, wenn ich nicht auf eine Liste zugreife habe ich den selben Code doch hier 6x ? :huh:

    Irgendwann mache ich mal eine C#-Schulung, als immer nur Wirtschaft und Sprachen. Versprochen :thumbup:
    Wenn du statt

    C#-Quellcode

    1. var maskeTextBoxList = new List<MaskedTextBox> { MtxtDate, MtxtAktivierung, MtxtDate2, MtxtAufschaltdatum, MtxtDate3, MTxtDueDate };


    das hier machst:

    C#-Quellcode

    1. var maskeTextBoxList = new MaskedTextBox[] { MtxtDate, MtxtAktivierung, MtxtDate2, MtxtAufschaltdatum, MtxtDate3, MTxtDueDate };


    erhältst du quasi den äquivalenten Code. List<MaskedTextBox> kapselt intern ein Array und fügt noch einige Dinge hinzu, was du aber in deinem Code nicht brauchst.

    Ein Array kannst du quasi als eine Liste mit fester Länge beschreiben, aber List<T> verwaltet das darin enthaltene Array so, dass es an die benötigte Größe der Liste angepasst wird. In deinem Fall ist aber der ganze Rahmen, der durch die List<T> gebildet wird, unnötig.

    Viele Grüße
    ~blaze~
    @newsletter Wenn Du allen MTextBoxen dasselbe Validating-Event gibst, geht das ohne Array / List:

    C#-Quellcode

    1. private void maskedTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    2. {
    3. MaskedTextBox mb = sender As MaskedTextBox;
    4. if (mb.MaskCompleted)
    5. {
    6. mb.BackColor = System.Drawing.Color.White;
    7. }
    8. else
    9. {
    10. mb.BackColor = System.Drawing.Color.LightYellow;
    11. }
    12. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank...

    Evtl noch zu diesem Problem mit Checkboxen...

    Wird z.B. ChkBestätigung bedrückt soll diese in einer MessageBox ausgegeben werden (Natürlich korrekterweise in eine CheckedListBox)

    C#-Quellcode

    1. CheckBox mycb = new CheckBox[] { ChkBestätigung, ChkLieferschein, ChkProdukt1, ChkProdukt2, ChkProdukt3, ChkProduk4, ChkMahnung };
    2. if (mycb.Checked == true)
    3. {
    4. MessageBox.Show(System.Convert.ToString(mycb));
    5. }
    6. MessageBox.Show(System.Convert.ToString(mycb));
    7. {
    8. }


    oder muss das so aussehen:

    C#-Quellcode

    1. private Void ... CheckedChanged()
    2. {
    3. CheckBox[] mycb = new CheckBox[4];
    4. mycb[0] = ChkBestätigung;
    5. mycb[1] = ChkLieferschein;
    6. ...
    7. if (mycb.Checked == true)
    8. {
    9. Messagebox.Show(mycb);
    10. }
    11. else
    12. {
    13. Messagebox.Show(mycb);
    14. }
    15. }

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „newsletter“ ()

    So:

    newsletter schrieb:

    C#-Quellcode

    1. CheckBox[] mycb = new CheckBox[] { ChkBestätigung, ChkLieferschein, ChkProdukt1, ChkProdukt2, ChkProdukt3, ChkProduk4, ChkMahnung };
    Es geht auch so:

    C#-Quellcode

    1. CheckBox[] mycb = { ChkBestätigung, ChkLieferschein, ChkProdukt1, ChkProdukt2, ChkProdukt3, ChkProduk4, ChkMahnung };
    Allerdings solltest Du Dir den Namen der Box ausgeben lassen, probiere aus, was Du sehen willst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!