String als Namesgeber für textBox (string -> TextBox)

Trynfail

Grünschnabel
Hi,

kann man auf irgendeine Art und Weise aus einem string eine TextBox machen? Umgekehrt ist das ja kein Problem mit textBox.ToString().

Ich habe zimlich viele TextBoxen in meinem Programm, die von eins an durch nummeriert sind und auf die ich so oder so ähnlich zugreifen möchte.

C#:
            for (int i = 1; i < 82; i++)
            {
                string text = "textBox" + i;
                ((TextBox)text).Enabled = true;
            }


Das geht nur nicht, weil man einen string nicht in einen "System.Windows.Forms.TextBox" umwandeln kann.

Ich denke (hoffe) mal, dass es auch eine Funktion gibt, mit der man dieses Problem beheben kann, die ich bisher einfach nur nicht gefunden habe.

Wenn dem nicht so seien sollte, wäre ich auch gerne für Vorschläge offen, wie man mit dem Problem sonst umgehen sollte. Mal abgesehen von den 81 Zeilen Programmcode nur für das aktivieren der Boxen
 
Hallo,

ich habs jetzt selbst noch nie gebraucht, aber probier doch mal sowas.

C#:
for (int i = 1; i < 82; i++)
{
    // finde alle Controls mit dem Name, der sollte natürlich eindeutig sein.
    Control[] tb = Controls.Find("textbox" + i, true);
    // dann wird er hoffentlich eines finden
    if (tb.Count() > 0 && tb[0] is TextBox)
    {
        TextBox b = (TextBox)tb[0];
        .... // mache was mit deiner Textbox
    }
}
 
Trynfail: Bislang jeder, der mir begegnet ist und diese Funktionalität brauchte, programmiert erst seit Kurzem. Ich vermute daher, dass du auch Neu bei .Net-Pogrammierung bist?
Mich würde interessieren, warum du diese Funktionalität benötigst. Denn ich vermute, dass es eine viel saubere Lösung für das eigentliche Problem gibt... Warum zum Beispiel benötigst du überhaupt 81 Textfelder? :rolleyes:
 
Ja ich war in den letzten Tagen dabei mir mithilfe von ein paar Turtorials C# beizubringen und bin deswegen was manche Dinge angeht noch nicht ganz so fit ^^. Das letzte halbe Jahr hatte ich an der Uni mit C programmiert, aber was die Fensterprogrammierung angeht ist mir das in C oder C++ zu umständlich. Deswegen jetzt C#.

Es geht wie bei Turri um ein Sudokulöseprogramm. Dazu braucht man natürlich 81 Eingabefelder. Ob man das nun durch NumericUpDowns macht oder TextBoxen oder was auch immer spielt da ja nicht so die große Rolle.

Die Funktion hab ich an folgenden Stellen verwendet:
-Verhindern einer anderen Eingabe außer Zahlen zwischen 1 und 9;
-Sperren des Feldes nach einer Eingabe;
-Freigabe und Löschen aller Inhalte mit einem Löschen-Button;

Wenn du eine komfortablere Lösung für das Problem hast, bin ich für Änderungsvorschläge gerne offen Shakie ;).
 
Hallo,

ich denke da bietet sich die Verwendung eines Arrays von Textboxen an, über die du dann einfach über ihren Index zugreifen kannst. Vielleicht sogar ein zweidimensionales Array, über das du dann gleich die 2D-Spielfläche abbilden kannst.

Gruß
MCoder
 
Hi MCoder,

ich hatte das prizipielle Problem schonmal mit C bearbeitet und hab das dort mit einem 4-dimensionalen Array gemacht um die Zeilen, Spalten und Felder einfach bestimmen zu können.

Ich hätte das auch gerne wieder so gemacht, wusste nur nicht wie :D

Wie bekommt man denn die TextBoxen in Arrays? Ich habe sie im Moment in TableLayoutPanels. Die haben zwar auch eine "Cell" angabe, auf die kann man (oder nur ich ;)) nicht zugreifen.
 
Als Liste...
C#:
List<TextBox> textboxen = new List<TextBox>();
...
textboxen.Add(textbox1);
...
Als Array...
C#:
TextBox[] textboxen = new TextBox[81];
textboxen[0] = textbox1;
textboxen[1] = textbox2;
...

Das gilt natürlich für den Codeteil, um die TextBoxen immer durchgehen zu können.
Das du die Textboxen auf der Form in irgendwelchen Layouts hast ist eine andere Sache.
 
Ah ok -.-"

Ja ich muss mich erst noch nen bisschen nan die Sprach gewöhnen...

Ich wusste nicht, dass man sich einfach TextBox[] basteln kann.

Aber gut zu wissen, danke

Ich dachte nur man würde das im Layout schon regeln, dass man das ähnlich wie die Position eben z.B über die Zelle des Lables bestimmen könnte.
 
Zurück