Dynamiczne kontrolki i ich obsługa

0

Mam dwie ksiązki C# i w żadnej nie ma konkretów.

Prosiłbym was o małą pomoc, mianowicie napisanie fragmentu kodu tworzącego na formie przykładowo 5 RadioButtonów. A potem fragment kodu (przypisany powiedzmy do przycisku) przeszukujący te dynamicznie stworzone elementy i który wyświetla komunikat (moze być messagebox), który RadioButton został wcisnięty.

O ile z pierwszą częścią zadania sobie radzę (chociaż mam wrazenie ze moje rozwizanie nie jest eleganckie) o tyle z drugą częścią już gorzej.

W VB6 możliwe było nadanie dwóm komponentom tej samej nazwy, ale różniące się tzw Indexem. Dzięki temu można było bardzo szybko przeszukiwać kontrolki. Wyglądało to mniej wiecej tak:

For i = 1 to 5
kontrolka(i).Text = "test"
next i

Czy można coś takiego uzyskać w C#? Wyczytałem, że można kontrolki umiescić w tablicy ale cos muszę robić żle.. bo wyskakują mi błedy. Pozdrawiam

0

        private void button1_Click(object sender, EventArgs e)
        {
            RadioButton MyRadio = new RadioButton();
            MyRadio.Text = "My Radio 1";
            MyRadio.Top = 10;
            MyRadio.Name = "MyRadio1";
            this.Controls.Add(MyRadio);

            MyRadio = new RadioButton();
            MyRadio.Text = "My Radio 2";
            MyRadio.Top = 30;;
            MyRadio.Name = "MyRadio2";
            this.Controls.Add(MyRadio);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            foreach (Object MyControl in this.Controls)
            {
                if ((MyControl.GetType().ToString() == "System.Windows.Forms.RadioButton") && (((RadioButton)MyControl).Checked))
                {                    
                        MessageBox.Show(((RadioButton )MyControl).Name + " checked!");                    
                }
            }
        }
0

Dzięki wielkie. Z tego co widzę to robiłem podobnie chociaż brakowało mi pewnych fragmentów kodu z drugiej częsci.

Ale nadal pozostaje pytanie... czy tak nalezy to faktycznie robic?

0
darek963 napisał(a)

        private void button1_Click(object sender, EventArgs e)
        {
            RadioButton MyRadio = new RadioButton();
            MyRadio.Text = "My Radio 1";
            MyRadio.Top = 10;
            MyRadio.Name = "MyRadio1";
            this.Controls.Add(MyRadio);

            MyRadio = new RadioButton();
            MyRadio.Text = "My Radio 2";
            MyRadio.Top = 30;;
            MyRadio.Name = "MyRadio2";
            this.Controls.Add(MyRadio);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            foreach (Object MyControl in this.Controls)
            {
                if ((MyControl.GetType().ToString() == "System.Windows.Forms.RadioButton") && (((RadioButton)MyControl).Checked))
                {                    
                        MessageBox.Show(((RadioButton )MyControl).Name + " checked!");                    
                }
            }
        }

Troszke bym to skrocil i poprawil:

private void button1_Click(object sender, EventArgs e) { for(i = 0; i< 5; i++) { RadioButton MyRadio = new RadioButton(); MyRadio.Text = "My Radio "+i; MyRadio.Top = 10+i*20; MyRadio.Name = "MyRadio"+i; this.Controls.Add(MyRadio); } }
    private void button2_Click(object sender, EventArgs e)
    {
        foreach (Control MyControl in this.Controls)
            if(MyControl is RadioButton)
              if((MyControl as RadioButton).Checked)
                MessageBox.Show((MyControl as RadioButton).Name + "checked");
    }
0

johny_bravo - pierwsza część rozwiązania jest identyczna z moją :). I dziekuje za drugą część. Teraz wiem na czym to polega.. Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1