Laden...

nach Textbox im Formular suchen

Erstellt von pgxn84 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.969 Views
P
pgxn84 Themenstarter:in
26 Beiträge seit 2007
vor 16 Jahren
nach Textbox im Formular suchen

Hallo,

ich möchte dynamisch nach einer Textbox mit einem bestimmten namen suchen, diese selektieren&beschreiben. Ungefähr so:


foreach this.activecontrol
{
    if (this.activecontrol.name = "textbox_x01")
    {
        this.activecontrol.text=data;
    }
    else
    {
        this.activecontrol ++;
    }

}

der Syntax ist natürlich in diesem Beispiel falsch. Aber ich glaube ihr versteht mein anliegen. Wie kann ich diese Funktion realisieren?

Danke, Chris

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo pgxn84,

siehe [FAQ] Variablennamen zur Laufzeit zusammensetzen

herbivore

A
254 Beiträge seit 2007
vor 16 Jahren

Hallo,

ob solch ein Verweis immer weiterhilft, halte ich für fraglich ...

Anbei ein kleines Beispiel :

 TextBox found = null;
            foreach (Control c in this.Controls)
            {
                if (c is TextBox)
                {
                    if (c.Name == "textBox1")
                    {
                        found = (TextBox)c;
                        break;
                    }
                }
            }

            found.Text = "Gefunden";
49.485 Beiträge seit 2005
vor 16 Jahren

Hallo a957m,

ob solch ein Verweis immer weiterhilft, halte ich für fraglich ...

vielen Danke für deine Bemühung. Trotzdem sollte die Frage erlaubt sein, wieso nicht? Wenn man den Verweisen in der FAQ folgt, findet man ein Code-Beispiel, dass sogar - mit Verlaub - deutlich sinnvoller ist als deins.

Wenn man davon ausgehen kann, dass c.Name gesetzt ist, sollte man per Controls ["textBox1"] zugreifen, was deutlich schneller und gleichzeitig einfacher geht als mit foreach.

herbivore

2.921 Beiträge seit 2005
vor 16 Jahren

Hinweis:

Es geht auch mit


Control[] control = FormAufDerGesuchtWird.Controls.Find("NameDesControls", false);

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

P
pgxn84 Themenstarter:in
26 Beiträge seit 2007
vor 16 Jahren

Original von a957m
Hallo,

ob solch ein Verweis immer weiterhilft, halte ich für fraglich ...

Anbei ein kleines Beispiel :

 TextBox found = null;  
            foreach (Control c in this.Controls)  
            {  
                if (c is TextBox)  
                {  
                    if (c.Name == "textBox1")  
                    {  
                        found = (TextBox)c;  
                        break;  
                    }  
                }  
            }  
  
            found.Text = "Gefunden";  

Danke für dein Beispiel. Diesen Ansatz hatte ich auch anfangs realisiert:


foreach (Control controlNext in this.Controls)                       
//for (int i = 1; i < 200; i++)
            {

                //controlNext = this.GetNextControl(controlNext, true);
                
                if (controlNext is TextBox)
                {
                    if (controlNext.Name.IndexOf("Data") != -1)
                    {
                        if (spiTxtNameString == null)
                        {
                            spiTxtNameString = spiTxtNameString + controlNext.Name + ",";
                            spiTxtAddrString = spiTxtAddrString + controlNext.Name.Substring(controlNext.Name.Length-2) + ",";
                        }
                        else
                        {
                            if (spiTxtNameString.IndexOf(controlNext.Name) == -1)
                            {
                                spiTxtNameString = spiTxtNameString + controlNext.Name + ",";
                                spiTxtAddrString = spiTxtAddrString + controlNext.Name.Substring(controlNext.Name.Length - 2) + ",";
                            }
                            else
                            {
                                //i = 200;
                                break;
                            }
                        }
                    }
                   
                }

            }

Problem dabei, er selektiert nur Panels und Buttons, aber nicht meine Textboxen aufm FOrmular?! Daher habe ich es mit einer For--Schleife realisiert, und

controlNext = this.GetNextControl(controlNext, true);

damit geht es auch. Besser wäre noch, wenn ich die Anzahl der Elemente wüsste. Gibt es den Befehl?

nach dem Motto: this.Controls.count;

Danke Chris

J
3.331 Beiträge seit 2006
vor 16 Jahren

Hallo Chris,

Original von pgxn84
Problem dabei, er selektiert nur Panels und Buttons, aber nicht meine Textboxen aufm FOrmular?!

Es sollte sich herumgesprochen haben, dass mit Controls nur die unmittelbar enthaltenen Elemente gefunden werden. Alle Beispiele für FindControl u.ä. betonen, dass rekursiv gearbeitet werden muss.

Deshalb hat dr4g0n76 folgenden Vorschlag gemacht:

Original von dr4g0n76

Control[] control = FormAufDerGesuchtWird.Controls.Find("NameDesControls", false);  

In :rtfm: Control.ControlCollection.Find-Methode ist zu lesen, dass mit dem 2. Parameter die untergeordneten Ebenen einbezogen werden können.

Original von pgxn84
Besser wäre noch, wenn ich die Anzahl der Elemente wüsste. Gibt es den Befehl?

nach dem Motto: this.Controls.count;

Nicht dass ich wüsste. Das ist wegen der notwendigen Rekursion auch fast unmöglich.

Gruß Jürgen