Diskuze: Náhodné tlačítko

C# .NET .NET (C# a Visual Basic) Náhodné tlačítko American English version English version

Avatar
petr.hruska93:

Ahoj, můj dotaz se týká okenních aplikací v C#. Dějme tomu, že budu mít 3 tlačítka. To první tlačítko bude fungovat jako spouštěč. Potřebuji docílit toho, že když zmačknu první tlačítko, náhodně se mi musí zabarvit jedno ze dvou zbylých tlačítek na černo. Jak zbravit určené tlačítko vím, dělal jsem to přes: názevTlačítka­.BackColor = Color.Black
Pokud ale budu chtít tlačítka zabarvit náhodně, nevím jak na to. Jediný z mých nápadů který funguje je to, že si vygeneruji do nějaké proměnné náhodně buď 1 nebo 2 a pak dám ifky:

if (nahodneCislo == 1)
{
tlacitko1.BackColor = Color.Black;
}
if (nahodneCislo == 2)
{
tlacitko2.BackColor = Color.Black;
}

Takto se to dá řešit. Pokud ale budu mít tlačítek 50, které chci zabarvit, musel bych udělat 50 ifů. Nevíte jak to jednodušeji vyřešit? Já jsem ještě zkoušel to, že jsem si udělal pole stringů a na jednotlivé pozice pole jsem dal názvy tlačítek. Pak jsem jen náhodně vygeneroval číslo a tím jsem chtěl zvolit pozici toho pole, takže bych dostal název jednoho z tlačítek. Ale nevím, jak s ním naložit. Napadlo mě toto:

nazevPole[6].Bac­kColor = Color.Black (na šesté pozici by bylo třeba tlačítko 6). Takto se ale kód použít bohužel nedá. Nevíte, jak by se to dalo udělat podobným způsobem? Díky moc :)

 
Odpovědět 3.4.2014 16:06
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na petr.hruska93
Zdeněk Pavlátka:

Místo pole stringů použij pole tlačítek:

Button[] buttons = new Button[pocet];
buttons[0] = button1;
buttons[1] = button2;
// a tak dál

Random rand = new Random();
int id = rand.Next(pocet);
buttons[id].BackColor = Color.Black;
Editováno 3.4.2014 16:14
Nahoru Odpovědět 3.4.2014 16:13
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na petr.hruska93
Jan Vargovský:
for (int i = 0; i < 20; i++)
{
    Button b = new Button();
    b.Text = i.ToString();
    flowLayoutPanel1.Controls.Add(b);
}

var buttons = flowLayoutPanel1.Controls.OfType<Button>();
Button randomButton = buttons.Skip(new Random().Next(buttons.Count())).First();
randomButton.Text = "randomed";

Jediné co musíš udělat, si přidat FlowLayoutPanel na form.

Abys to viděl nějak in-time tak si tam přidej ještě někde button kterým to budeš spouštět a tento kód

button1.Click += (o, e) =>
    {
        flowLayoutPanel1.Controls.Clear();
        for (int i = 0; i < 20; i++)
        {
            Button b = new Button();
            b.Text = i.ToString();
            flowLayoutPanel1.Controls.Add(b);
        }

        var buttons = flowLayoutPanel1.Controls.OfType<Button>();
        Button randomButton = buttons.Skip(new Random().Next(buttons.Count())).First();
        randomButton.Text = "randomed";
    };
Editováno 3.4.2014 16:17
 
Nahoru Odpovědět 3.4.2014 16:15
Avatar
petr.hruska93:

Moc vám děkuju. Nenapadlo by mě, že existuje pole tlačítek. :D

 
Nahoru Odpovědět 3.4.2014 16:57
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na petr.hruska93
Jan Vargovský:

Pořád budeš jako otrok psát někde zbytečně n tlačítek a rvát je do pole.

 
Nahoru Odpovědět 3.4.2014 16:58
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.