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!


Anmelden zum Antworten