Fragensteller
Für 63-TextBoxen 63 VERSCHIEDENE Klassenobjekte erzeugen mit Windows Forms c++/cli

Frage
-
Hallo erstmal!
Ich versuche einen Stundenplan mit c++/cli über Windows Forms zu programmieren.
Mein Problem:
Ich möchte per Doppelklick auf die jeweilige TextBox jeweils ein Objekt meiner selbst erstellten Klasse (Eintrag) erzeugen und darin die über eine zweite (aufploppende) Form eingelesenen Einträge (Dozent, startzeit, usw.) speichern und in der TextBox bzw RichTextBox ausgeben.
Jetzt will ich ja nicht 63mal den selben Code Kopieren und jeweils die Namen der TextBoxen anpassen, weshalb ich mir dachte ein array aus Zeigern meiner eigenen Klasse(Eintrag) zu erzeugen und über die Indizes die stelle im Zeigerarray aufzurufen. Um allen TextBoxen dem gleichen Event (Doppel_Click) zuzuweisen.
Soweit sogut. Jetzt komme ich nicht weiter, weil ich ja immer noch auf die Einzelnen TextBoxen zugreifen muss (this->TextBox1->text, this->TextBox2->Text usw. usw.), gibt es keine Möglichkeit an Indizes für TextBoxen zu kommen?
Weil wenn ich die TextBoxen zu Laufzeit erzeugen lasse, dann kann ich ja nichts mehr über den Entwurf ändern.
Codebeispiel: Hier Erzeuge ich die TextBoxen zur Laufzeit, das Klappt! Nur das Bearbeiten im Entwurf funktioniert dann nicht mehr, wie gesagt.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
static array<System::Windows::Forms::RichTextBox^,2>^ TextBoxArray = gcnew array<System::Windows::Forms::RichTextBox^,2>(7,9);
Form1(void)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
for(int i=0;i<7;i++)
{
for(int j=0;j<9;j++)
{
this->TextBoxArray[i,j] = gcnew System::Windows::Forms::RichTextBox;
this->tableLayoutPanel1->Controls->Add(this->TextBoxArray[i,j],(i+1),(j+1));
this->TextBoxArray[i,j]->ReadOnly = true;
}
}
}
- Bearbeitet Lars-K1 Samstag, 22. Juni 2013 14:22
Alle Antworten
-
Hallo, ich denke das es am einfachsten geht wenn du den TextBoxen Namen gibst und dann über den Namen die Controls abfragst. Also einen Namen im folgenden Muster zusammen baust:
textBox_1_2
1 ist der Tag und 2 die Stunde am Tag.
Nun kannst du entsprechend das Control (die TextBox) ansprechen. Einige Ideen, wie man das machen kann, gibts hier. In C++/CLI funktionierts fast gleich.
PS: http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/
C# ist ähnlich zu C++ (Syntaktisch) und für WinForms besser geeignet. Für C++ eher WinAPI o.ä. nutzen.<Code:13/> - Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite | Code Beispiele | Facebook | Snippets | Twitter
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier.- Als Antwort vorgeschlagen Tom Lambert (Koopakiller) Samstag, 20. Juli 2013 23:07
-
Hallo! Danke für die schnelle Antwort erstmal. Das Problem besteht aber weiterhin, über Controles ( zumindest bei den Beispielen) muss ich immer noch den Namen der TextBoxen kennen und kann nicht einfach in einer for-Schleife alle TextBoxen ansprechen.
Nach dem Motto:
objektadresse funktionsName(void)
{
static int i =0;
static int j =0;
for(...)
{
for(...)
{
If(i == HilfsVar && j==HilfsVar)
Erstelle objekt[i,j] für textbox[i,j]....
}
}
return objektadresse
}
- Bearbeitet Lars-K1 Samstag, 22. Juni 2013 18:43 Berichtigung
-
Also wenn es darum geht im Event-Handler an das TextBox-Objekt heran zu kommen, das wird dir in dem sender-Parameter mitgeliefert. Dieses musst du dann nurnoch in eine TextBox casten und dann kannst du normal darauf zugreifen. Ein 2. Array/Liste ist dafür nicht nötig.
<Code:13/> - Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite | Code Beispiele | Facebook | Snippets | Twitter
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier. -
Du kannst die TextBoxen mit dem Designer erzeigen. Anschließend überträgst Du einfach die ganzen Handles in einen Array... Über den Array kannst Du die TextBoxen dann behandeln wie auch über die originalen Variablen.
Auch das gleiche Event zuzuordnen geht dann über den Array einfach.
So hättest Du "The best of both worlds" (BTW: nettes von Robert Palmer ;) )
PS: Über die Unsinnigkeit solcher UI s lässt sich streiten. Warum kein Grid verwenden für solche Daten?
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Bearbeitet Martin RichterModerator Dienstag, 25. Juni 2013 07:34 Ergänzung
- Als Antwort vorgeschlagen Tom Lambert (Koopakiller) Samstag, 20. Juli 2013 23:07