Laden...

TextBox Dynamisch in TabControl Page aufrufrn

Erstellt von NorbertG vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.285 Views
N
NorbertG Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren
TextBox Dynamisch in TabControl Page aufrufrn

Hallo zusammen,
bin neu hier und habe mich vor kurzem erst mit C# Beschäftigt.
Ich bin an einem Projekt wo ich mittels C# einen Arduino Steuern möchte.

Jetzt habne ich meine TextBox welche Dynamisch aufgerufen werden von einer GroupBox in TabControls verschoben, leider bekomme ich es nicht hin die Page Dynamisch aufzurufen und bitte um euere Unterstützung!

hier mein Beispiel:
so funktioniert es nicht

Controls[Page[f]].Controls[CAnzahl[f]].Text = "0";

            string[] CAnzahl = new string[] { "txt_Anzahl_1", "txt_Anzahl_2", "txt_Anzahl_3", "txt_Anzahl_4", "txt_Anzahl_5", "txt_Anzahl_6", "txt_Anzahl_7", "txt_Anzahl_8", "txt_Anzahl_9", "txt_Anzahl_10" };

            String[] Page = new string[] { "tabPage1", "tabPage2", "tabPage3", "tabPage4", "tabPage5", "tabPage6", "tabPage7", "tabPage8", "tabPage9", "tabPage10", };

            serialPort.WriteLine("5000."); //Lese Rezepte

            if (MessageBox.Show("Sollen die Rezepte gelesen werden?", "Let it mix",
                  MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                  == DialogResult.No)
            {
                return;
            }

            for (int f = 0; f < 10; f++)
            {
                //Controls[Page[f]].Controls[CAnzahl[f]].Text = "0";
                gbData.Controls[CAnzahl[f]].Text = "0";
         
            }
...

Gruß
Norbert

P
441 Beiträge seit 2014
vor 5 Jahren

Hi,

so können wir dir fast nicht helfen.
-> Was funktioniert denn nicht?
-> Hast du mal mit dem Debugger ( [Artikel] Debugger: Wie verwende ich den von Visual Studio? ) geschaut, wie sich deine Zugriff auflösen, was die Objekte z.B. beim Aufruf von Controls["..."] zurückgibt?

4.938 Beiträge seit 2008
vor 5 Jahren

Du mußt selbstverständlich auf das TabControl-Objekt (und dessen TabPages) zugreifen (und nicht auf die Controls der Form).


var tabPage = tabControl.TabPages[page]; // Zugriff über Index

Controls controls = tabPage.Controls;
controls[CAnzahl[f]].Text = "0";

(das Array Page ist also überflüssig)

Auch das Array CAnzahl halte ich hier für nicht notwendig, aber dazu müßte ich mehr Infos haben.
Ich verstehe es aber richtig, daß du auf jeder TabPage genau eine der TextBoxen platziert hast?
Du könntest z.B. einfach den Namen dynamisch zusammensetzen:


string textBoxName = "txt_Anzahl_" + (x+1).ToString();
controls[textBoxName].Text = "0";

PS: Wenn schon Arrays, dann sollten die Namen in Plural (Mehrzahl) geschrieben sein.

N
NorbertG Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren

Hallo,
besten dank für die Hilfe, leider bekomme ich folgende Fehlermeldung:
"Der Typ "System.Windows.Forms.Control.ControlCollection" kann nicht implizit in "System.Windows.Forms.Control" konvertiert werden."

Control controls = tabPage.Controls;

Ich verstehe es aber richtig, daß du auf jeder TabPage genau eine der TextBoxen platziert hast?
Du könntest z.B. einfach den Namen dynamisch zusammensetzen:

In diesem fall ja, aber es sind weitere 18 TextBoxen, die dann ebenfalls angesprochen werden sollen.

  
          for (int f = 0; f < 10; f++)
            {
                var tabPage = tabRezepte.TabPages[f]; // Zugriff über Index
                string textBoxName = "txt_Anzahl_" + (f+1).ToString();
                Control controls = tabPage.Controls;
                //controls[CAnzahl[f]].Text = "0";

                
                Controls[textBoxName].Text = "0";
                //gbData.Controls[CAnzahl[f]].Text = "0";
            }

P
441 Beiträge seit 2014
vor 5 Jahren

Hallo Norbert,

die Fehlermeldung sagt, dass du versucht einer Variable eines bestimmten Typs einen anderen, nicht kompatiblen zuzuweisen (Das ist wie Äpfel und Birnen vergleichen). Das sind Grundlagen.
Vielleicht hilft dir das weiter: [FAQ] Wie finde ich den Einstieg in C#?

Eine Collection ist dabei immer die Mehrzahl von dem eigentlichen Typ, deine Variable erwartet allerdings genau ein Control, nicht eine ControlCollection.

4.938 Beiträge seit 2008
vor 5 Jahren

Sorry, hatte es nur im Editor hier getippt.
Heißt natürlich


Control.ControlCollection controls = tabPage.Controls;
// bzw.
var controls = tabPage.Controls;

Aber solche Fehler solltest du selber lösen können...