04. maj 2005 - 22:57Der er
18 kommentarer og 1 løsning
At fylde et Textbox[] med textboxe fra en vilkårlig form
Jeg vil gerne lave et TextBox[] der indeholder alle mine textboxe fra "currentForm" (dvs. den form jeg vælger at kalde metoden med). Jeg har lidt svært ved at få fyldt mit array med mine textboxe fordi jeg bruger MDI og derved må typecaste. Når jeg har fyldt mit array vil jeg gerne tjekke én textbox ad gangen for om den er tom.
Jeg har forsøgt mig med nedenstående kode, men jeg får for det første en fejl(Object reference not set to an instance of an object) ved if(tb.Text == ""). For det andet er koden lidt kejtet idet jeg helst ikke vil fylde textboxene ind i array'et "manuelt" ..
Nogen forslag?
----- kode: -----
public static void TjekTextBox(Form currentForm) { TextBox[] tbArray = new TextBox[10]; tbArray[1] = ((FNewCustomer)currentForm).TbFirstName;
foreach(TextBox tb in tbArray) { if(tb.Text == "") { MessageBox.Show("Et eller flere felter er ikke udfyldt"); } }
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Hvis du på din form laver en public property der giver adgang til formens control-collection kan du gøre sådan her:
public static void TjekTextBox(Form currentForm) { foreach (Control c in ((FNewCustomer)currentForm).Controls) { if (c is TextBox) { TextBox txt = (TextBox)c; if (txt.Text == "") MessageBox.Show("Et eller flere felter er ikke udfyldt"); } } }
Det ser ud til at du tjekker eksternt i forhold til din FnewCustomer-fom. Imidlertid burde et sådant tjek lægge internt som en del af det der sker når der trykkes på ok-knappen:
foreach (Control control in Controls) { if (control is TextBox) { if (control.Text == null || control.Text.Trim() == "") { EmptyTextBox = true; break; } } }
if (EmptyTextBox) MessageBox.Show("Et eller flere felter er ikke udfyldt"); else this.DialogResult = DialogResult.OK; }
Bemærk: Hvis du laver "avancerede" ting som at placere nogle af dine TextBox-kontroller inden i f.eks. en GroupBox skal ovesntående kode justeres til at kigge indenfor i disse.
if (EmptyTextBox) MessageBox.Show("Et eller flere felter er ikke udfyldt"); else this.DialogResult = DialogResult.OK; }
- og:
public static bool TjekTextBox(Control.ControlCollection controls) { foreach (Control control in controls) { if (control is TextBox) if (control.Text == null || control.Text.Trim() == "") return true; }
return false; }
Jeg har valgt at bruge en løsning med et flag (EmptyTextBox fro det foregående eksempel) for at undgå at man får en MessageBox for *hver eneste* tom TextBox.
public static bool TjekTextBox(Control.ControlCollection controls) { foreach (Control control in controls) { if (control is GroupBox) TjekTextBox(control.Controls);
if (control is TextBox) if (control.Text == null || control.Text.Trim() == "") return true; }
public static bool TjekTextBox(Control.ControlCollection controls) { foreach (Control control in controls) { if (control is TextBox) if (control.Text == null || control.Text.Trim() == "") return true;
if (control is GroupBox) foreach (Control controlInGroupBox in control.Controls) if (controlInGroupBox.Text == null || controlInGroupBox.Text.Trim() == "") return true; }
public static bool TjekTextBox(Control.ControlCollection controls) { foreach (Control control in controls) { if (control is GroupBox) if (TjekTextBox(control.Controls) == true) return true;
if (control is TextBox) if (control.Text == null || control.Text.Trim() == "") return true; }
Okay det er virkelig godt! Men egentlig har jeg kun textboxe i groupboxes - kan jeg så ikke skrive:
public static bool TjekTextBox(Control.ControlCollection controls) { foreach (Control control in controls) { if (control is GroupBox) foreach (Control controlInGroupBox in control.Controls) if (controlInGroupBox.Text == null || controlInGroupBox.Text.Trim()== "") return true; }
Ang. "09/05-2005 01:49:09" så vil jeg nu ikke råde dig til at gøre det på den måde. Gør det hellere som i "08/05-2005 17:07:16" for så er du fremtidsikret til den dag hvor du beslutter dig for at lave det på en lidt anden måde.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.