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
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?
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.
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";
}
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.
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...