NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:
Avatar
Antonín Výtaha:31. srpna 23:21

Ahoj kolegové :-)

lze v kódu

tlacitko.Click += tlacitko_Click

nahradit += něčím jiným? Když si vyvolám MessageBox, tak se mi ty MessageBoxy pořád nasčítávají (potažmo se nasčítávají ty kliknutí do tlačítka).

Button tlacitko = new Button();

private void ButtonVyberOtazek1_Click(object sender, RoutedEventArgs e)
{
    tlacitko.Content = "Kukuku";
    Grid.SetColumn(tlacitko, 2);
    Grid.SetRow(tlacitko, 0);
    MenuGrid.Children.Add(tlacitko);
    tlacitko.Click += tlacitko_Click;

}

private void tlacitko_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Kliklo se na nové tlačítko");
    MenuGrid.Children.Remove(tlacitko);
    tlacitko.Click -= tlacitko_Click;
}

Zkusil jsem: Ošetřil jsem to přidáním -= do akce tlačítka, ale šlo by to udělat i bez toho?

Chci docílit: Řeším jen ze zvědavosti.

 
Odpovědět
31. srpna 23:21
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Antonín Výtaha
DarkCoder:1. září 9:48

Můžeš zkusit následující:

Před přidáním handleru ověř, že tam už není. K tomu použiješ pomocnou proměnnou.

bool handlerPridan = false;

private void ButtonVyberOtazek1_Click(object sender, RoutedEventArgs e)
{
    tlacitko.Content = "Kukuku";
    Grid.SetColumn(tlacitko, 2);
    Grid.SetRow(tlacitko, 0);

    if (!MenuGrid.Children.Contains(tlacitko))
    {
        MenuGrid.Children.Add(tlacitko);
    }

    if (!handlerPridan)
    {
        tlacitko.Click += tlacitko_Click;
        handlerPridan = true;
    }
}

Nebo varianta kde odstraníš starý handler vždy před přidáním nového

Button tlacitko = new Button();

private void ButtonVyberOtazek1_Click(object sender, RoutedEventArgs e)
{
    tlacitko.Content = "Kukuku";
    Grid.SetColumn(tlacitko, 2);
    Grid.SetRow(tlacitko, 0);

    if (!MenuGrid.Children.Contains(tlacitko))
    {
        MenuGrid.Children.Add(tlacitko);
    }

    // Odstranění starého handleru, pokud by tam byl
    tlacitko.Click -= tlacitko_Click;

    // Přidání handleru
    tlacitko.Click += tlacitko_Click;
}

private void tlacitko_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Kliklo se na nové tlačítko");

    MenuGrid.Children.Remove(tlacitko);

    // Odstranění handleru
    tlacitko.Click -= tlacitko_Click;
}
Nahoru Odpovědět
1. září 9:48
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Antonín Výtaha:4. září 22:40

Děkuji za návrhy, ale popravdě mi asi nakonec přijde přeci jen jednodušší ten handler zlikvidovat při jeho zrušení.

Jen mě vlastně doteď nikdy nenapadlo, že se tam nasčítávají, takže mi teď zpětně dochází, proč se mi někdy děly věci, které se dít neměly. 😁

 
Nahoru Odpovědět
4. září 22:40
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Antonín Výtaha
DarkCoder:4. září 22:45

Ano, smysl mého příspěvku je ukázat způsob jak pracovat pouze s jedním handlerem a nedocházelo tak k jeho nasčítávání.

Nahoru Odpovědět
4. září 22:45
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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 4 zpráv z 4.