• 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 ?

VPS Starter Arubacloud
0 głosów
320 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 (255,440 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 (155,080 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ź 430 wizyt
pytanie zadane 11 maja 2015 w C i C++ przez damian5996 Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 1,633 wizyt
0 głosów
2 odpowiedzi 358 wizyt
pytanie zadane 5 października 2016 w C# przez Alex.Ironside Stary wyjadacz (14,900 p.)

92,843 zapytań

141,784 odpowiedzi

320,859 komentarzy

62,177 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...