• 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
169 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,070 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,260 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ź 343 wizyt
pytanie zadane 11 maja 2015 w C i C++ przez damian5996 Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 1,355 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,130 zapytań

140,788 odpowiedzi

317,814 komentarzy

61,452 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 1886p. - Łukasz Eckert
  2. 1856p. - Dawid128
  3. 1844p. - Marcin Putra
  4. 1844p. - CC PL
  5. 1775p. - Mikbac
  6. 1644p. - jaroslawroszyk
  7. 1633p. - rafalszastok
  8. 1562p. - rucin93
  9. 1553p. - sefirek
  10. 1492p. - Adrian Wieprzkowicz
  11. 1456p. - Eryk Andrzejewski
  12. 1424p. - ssynowiec
  13. 1383p. - Rafał Trójniak
  14. 1325p. - Michal Drewniak
  15. 1275p. - dia-Chann
Szczegóły i pełne wyniki

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.

Uwaga - w dniach od 02.12 do 08.12 trwają Mikołajki (książki drukowane mają rabat -35%, ebooki do -45%). Zaś dodatkowy, specjalny kod zniżkowy: HELMIKOLAJ-10 dla naszych Widzów zapewni Wam oszczędność -10zł dla zamówień powyżej 70zł! Warto korzystać!

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 - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...