Switch Case von einem Array
-
Hallo miteinander,
ich bin neu hier im Forum und habe direkt mal ein Anliegen.Ich habe folgendes Array in meiner Windows Forms Application
void InitializeCheckAuto(void) { array<RadioButton^>^ CheckAuto; CheckAuto = gcnew array<RadioButton^>(4); int y = 10; for(int i=0;i<4;i++) { CheckAuto[i] = gcnew System::Windows::Forms::RadioButton(); CheckAuto[i]->Parent = this; this->Controls->Add(CheckAuto[i]); CheckAuto[i]->Location = System::Drawing::Point(10, y); CheckAuto[i]->Size = System::Drawing::Size(100, 17); CheckAuto[i]->Name = "CheckAuto " + (i+1); CheckAuto[i]->Text = "CheckAuto " + (i+1); y += 35; } }
Ich möchte Abfragen, welcher (von vieren) RadioButton selektiert wurde und was dann passieren soll ... dies wollte ich mit Switch Case in einem Change-Ereignis machen. Die Frage hier jedoch: Wie kann ich dies umsetzen und wie mache ich das Array CheckAuto außerhalb der Funktion bekannt?
Schon einmal Danke im voraus, für jeden der helfen möchte.
-
Tut mir Leid, wenn ich mich vertue, aber müsstest du das nicht lieber in den WinApi Bereich schreiben? Ich denke mal, da hast du mehr erfolg.
-
Gehört wohl eher nach C++/CLI ?
-
rean schrieb:
Gehört wohl eher nach C++/CLI ?
Ja (Die ^ Notation für die "managed" Objekte, ebenso wie gcnew sind eindeutig C++/CLI).
-
Dieser Thread wurde von Moderator/in Phoemuex aus dem Forum C++ in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wenn das eine Elementfunktion ist, dann mach das Array als Member der dazugehörigen Klasse.
-
Ich würde das so machen...
public: array<RadioButton^>^ CheckAuto; Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // CheckAuto = gcnew array<RadioButton^>(4); int y = 10; for(int i=0;i<4;i++) { CheckAuto[i] = gcnew System::Windows::Forms::RadioButton(); CheckAuto[i]->Parent = this; this->Controls->Add(CheckAuto[i]); CheckAuto[i]->Location = System::Drawing::Point(10, y); CheckAuto[i]->Size = System::Drawing::Size(100, 17); CheckAuto[i]->Name = "CheckAuto " + (i+1); CheckAuto[i]->Text = "CheckAuto " + (i+1); y += 35; CheckAuto[i]->Click += gcnew System::EventHandler(this, &Form1::CheckAuto_CheckThis); }
private: void CheckAuto_CheckThis(System::Object^ sender, System::EventArgs^ e) { if (CheckAuto[0]->Checked == true) { MessageBox::Show("1"); } if (CheckAuto[1]->Checked == true) { MessageBox::Show("2"); } if (CheckAuto[2]->Checked == true) { MessageBox::Show("3"); } if (CheckAuto[3]->Checked == true) { MessageBox::Show("4"); } }
Statt eine "switch-case-Anweisung" ein "if-Anweisung"
Gruß :xmas2:
-
Der Casezweig benötigt eine Konstante. Von daher scheidet die Idee mit dem Switch case vornherein aus.
-
genau wie "Doug_HH" erstellen und initialisieren und dann kannst du dir ne Methode schreiben wie:
public: Int32 GetCheckedIndex(){ Int32 index=0; for(Int32 a=1; a<5; a++){ if(CheckAuto[a]->Checked==true) IndexVar = a; } return index; }
und dann kannst du von jeder stelle auf die methode zugreifen und erhälst immer den Index als Int32.
switch(GetChecedIndex()){ case 1: //... break; case 2: //... break; case 3: //... break; case 4: //... break; }
-
array<RadioButton^>^ CheckAuto; Form1(void) { InitializeComponent(); InitializeRadioButtons(); } void InitializeRadioButtons(void) { CheckAuto = gcnew array<RadioButton^>(4); int y = 10; for(int i=0;i<4;i++) { CheckAuto[i] = gcnew System::Windows::Forms::RadioButton(); CheckAuto[i]->Parent = this; this->Controls->Add(CheckAuto[i]); CheckAuto[i]->Location = System::Drawing::Point(10, y); CheckAuto[i]->Size = System::Drawing::Size(100, 17); CheckAuto[i]->Name = "CheckAuto " + (i+1); CheckAuto[i]->Text = "CheckAuto " + (i+1); y += 35; CheckAuto[i]->Click += gcnew System::EventHandler(this, &Form1::CheckAuto_CheckThis); } }
public: Int32 GetCheckedIndex(){ Int32 index=0; for(Int32 a=0; a<4; a++){ if(CheckAuto[a]->Checked==true) index = a; } return index; } public: void CheckAuto_CheckThis(System::Object^ sender, System::EventArgs^ e) { switch( GetCheckedIndex()) { case 0: MessageBox::Show("Button 1 gewählt"); break; case 1: MessageBox::Show("Button 2 gewählt"); break; case 2: MessageBox::Show("Button 3 gewählt"); break; case 3: MessageBox::Show("Button 4 gewählt"); break; } }
So habe ich es jetzt (beispielhaft mit der MessageBox) gemacht. Funktioniert einwandfrei.
Vielen Dank an jeden der geholfen hat!