• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gdzieś jest błąd przy switch case ?

Object Storage Arubacloud
0 głosów
262 wizyt
pytanie zadane 11 maja 2023 w C# przez marcin20a Początkujący (280 p.)

Witam! Na "ifach" mi to działa ale chciałbym dla testu zrobić na switch case i już nie działa. Dwie funkcje jedna wywołuje drugą (tak potrzebuję). Mam trzy radioButtony i gdy wybiorę któryś z nich i kliknę button to w textBox nie pokazuje mi który został włączony. Gdzieś zrobiłem błąd...

Działający na "ifach":

namespace TwoFunction
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            liczenie();
        }

        public void liczenie() //cały kod 
        {
            string[] zmienna = new string[] { "rB1", "rB2", "rB3" };

            if (radioButton1.Checked)
            {
                textBox1.Text = zmienna[0];
            }

            else if (radioButton2.Checked)
            {
                textBox1.Text = zmienna[1];
            }

            else if (radioButton3.Checked)
            {
                textBox1.Text = zmienna[2];
            }
        }
    }
}

Nie działający switch case:

namespace TwoFunction
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            liczenie();
        }

        public void liczenie() //cały kod 
        {

            string[] zmienna = new string[] { "rB1" , "rB2", "rB3" };

            RadioButton radioBtn = new RadioButton();
            if (radioBtn.Enabled == true)
            {
                switch (radioBtn.Name)
                {
                    case "radioButton1":
                        textBox1.Text = zmienna[0];
                        break;

                    case "radioButton2":
                        textBox1.Text = zmienna[1];
                        break;

                    case "radioButton3":
                        textBox1.Text = zmienna[2];
                        break;
                }
            }
        }
    }
}

 

2 odpowiedzi

+3 głosów
odpowiedź 11 maja 2023 przez VBService Ekspert (253,420 p.)
edycja 12 maja 2023 przez VBService

Czemu?

if (radioBtn.Enabled == true)

a nie

if (radioBtn.Checked == true)

 

spróbuj np. iterując po radioButton-ach

        public void liczenie()
        {
            string[] zmienna = new string[] { "rB1", "rB2", "rB3" };

            foreach (RadioButton radioButton in new RadioButton[] { radioButton1, radioButton2, radioButton3 })
            {
                if (radioButton.Checked == true)
                {
                    switch (radioButton.Name)
                    {
                        case "radioButton1":
                            textBox1.Text = zmienna[0];
                            break;

                        case "radioButton2":
                            textBox1.Text = zmienna[1];
                            break;

                        case "radioButton3":
                            textBox1.Text = zmienna[2];
                            break;
                    }
                }
            }
        }

lub np.

        public void liczenie()
        {
            string[] zmienna = new string[] { "rB1", "rB2", "rB3" };
 
            foreach (RadioButton radioButton in new RadioButton[] { radioButton1, radioButton2, radioButton3 })
            {
                if (radioButton.Checked == true)
                {
                    int index = -1;
                    switch (radioButton.Name)
                    {
                        case "radioButton1": index = 0; break;
                        case "radioButton2": index = 1; break;
                        case "radioButton3": index = 2; break;
                    }

                    if (index > -1) textBox1.Text = zmienna[index];
                }
            }
        }

 

możesz też np.

        public void liczenie()
        {
            string[] zmienna = new string[] { "rB1", "rB2", "rB3" };
            RadioButton[] radioButtons = { radioButton1, radioButton2, radioButton3 };

            for (int i=0; i<radioButtons.Length; i++)
            {
                if (radioButtons[i].Checked == true)
                {
                    textBox1.Text = zmienna[i];
                }
            }
        }

 

możesz też spróbować wykorzystać radioButton.TabIndex

        public void liczenie()
        {
            string[] zmienna = new string[] { "rB1", "rB2", "rB3" };

            foreach (RadioButton radioButton in new RadioButton[] { radioButton1, radioButton2, radioButton3 })
            {
                if (radioButton.Checked == true)
                {
                    textBox1.Text = zmienna[radioButton.TabIndex];
                }
            }
        }

 

możesz też tak jak już Tobie @Velta; sugerował użyć Linq, np.

        public void liczenie()
        {
            RadioButton radioButton = Controls.OfType<RadioButton>()
             .Where(control => control.Checked)
             .FirstOrDefault();

            if (radioButton != null)
            {
                string[] zmienna = new string[] { "rB1", "rB2", "rB3" };
                textBox1.Text = zmienna[radioButton.TabIndex];
            }
        }

 

możesz też spróbować wykorzystać radioButton.Tag

        public Form1()
        {
            InitializeComponent();

            string[] zmienna = new string[] { "rB1", "rB2", "rB3" };
            RadioButton[] radioButtons = { radioButton1, radioButton2, radioButton3 };

            for (int i=0; i<radioButtons.Length; i++)
                radioButtons[i].Tag = zmienna[i];
        }

        private void liczenie()
        {
            RadioButton radioButton = Controls.OfType<RadioButton>()
             .Where(control => control.Checked)
             .FirstOrDefault();

            if (radioButton != null)
                textBox1.Text = (string)radioButton.Tag;
        }

 

+1 głos
odpowiedź 11 maja 2023 przez tangarr Mędrzec (154,860 p.)
W kodzie z if-ami używasz zmiennych radioButton1, radioButton2, radioButton3 istniejącymi gdzieś na formularzu.
W kodzie ze switchem tworzysz nową kontrolkę, nie ustawiasz w niej pola Name i oczekujesz, że magicznie coś się wykona.

Podobne pytania

0 głosów
1 odpowiedź 384 wizyt
pytanie zadane 11 maja 2015 w C i C++ przez damian5996 Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 1,541 wizyt
0 głosów
2 odpowiedzi 341 wizyt
pytanie zadane 5 października 2016 w C# przez Alex.Ironside Stary wyjadacz (14,900 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...