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

Hosting forpsi easy 1 pln
0 głosów
166 wizyt
pytanie zadane 11 maja 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 przez VBService Ekspert (246,010 p.)
edycja 12 maja 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 przez tangarr Mędrzec (154,200 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ź 341 wizyt
pytanie zadane 11 maja 2015 w C i C++ przez damian5996 Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 1,344 wizyt
0 głosów
2 odpowiedzi 329 wizyt
pytanie zadane 5 października 2016 w C# przez Alex.Ironside Stary wyjadacz (14,880 p.)

92,081 zapytań

140,737 odpowiedzi

317,697 komentarzy

61,401 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (w dniach 24.11 - 29.11 z okazji Black Friday, a potem będzie to -30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla 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 15% 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!

...