Diskuze: Tvorba tlačítka za běhu aplikace

C# .NET .NET (C# a Visual Basic) Tvorba tlačítka za běhu aplikace American English version English version

Avatar
Mediel
Redaktor
Avatar
Mediel:

Ahoj přátelé,

za běhu vytvářím tlačítka a i jeho událost on click.

takto vytvářím tlačítka:

private void PridejPoleDoSachovnice(int x, int y, int barva, int cisloPolicka)
        {
            Button policko = new Button();
            policko.Size = new Size(50, 50);
            policko.Location = new Point(x * 50, y * 50 + 25);
            policko.Click += new EventHandler(policko_Click);
            policko.Tag = y + "|" + x;
            if (barva == 0)
            {
                policko.BackColor = Color.White;
            }
            else
            {
                policko.BackColor = Color.Black;
            }
            seznamPolicek.Add(policko);

        }

takto vypadá metoda Click:

private void policko_Click(object sender, EventArgs e)
        {
            // zde bych potřeboval přistupovat k tlačítku na které jsem kliknul a jeho vlastnosti Tag. Můžete mi prosím někdo pomoc?
        }
Odpovědět 1.11.2012 23:36
Nechci vám ukazovat, jak dobrý jsem já ... Chci vám ukázat, jak dobrý můžete být vy ... Když uvěříte ... V sami sebe...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Mediel
David Čápka:

Už jsem ti chtěl napsat jakou máš otázku a ona je v komentáři :D Tlačítko máš v tom sender, jen si ho musíš přetypovat na Button.

Nahoru Odpovědět 2.11.2012 12:49
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Mediel
Redaktor
Avatar
Mediel:

A přetypovat? Jak přetypovat? Jako že místo sender tam dám button?

Nahoru Odpovědět 2.11.2012 12:50
Nechci vám ukazovat, jak dobrý jsem já ... Chci vám ukázat, jak dobrý můžete být vy ... Když uvěříte ... V sami sebe...
Avatar
matesax
Redaktor
Avatar
Odpovídá na Mediel
matesax:
sender as Button

třeba:

Button senderAsButton = sender as Button;

nebo:

string senderText = (sender as Button).Text;

...

Sender = odesílatel... A protože může mít mnoho typů, je přenášen v objektu - ten je třeba přetypovat - třeba na Control - nebo přímo na daný typ Controlu...

Editováno 2.11.2012 13:51
 
Nahoru Odpovědět 2.11.2012 13:48
Avatar
Mediel
Redaktor
Avatar
Mediel:

Diky :) Skvele :)

Nahoru Odpovědět 2.11.2012 16:10
Nechci vám ukazovat, jak dobrý jsem já ... Chci vám ukázat, jak dobrý můžete být vy ... Když uvěříte ... V sami sebe...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Mediel
David Čápka:

Mohlo by fungovat i (Button)sender­.Text. To je přetypování a znamená to změnu rozhraní objektu. Samozřejmě v tom objektu musí dané rozhraní být, jinak program upadne. AS by mělo dělat to samé, jen v případě neúspěchu vrátí null místo výjimky.

Nahoru Odpovědět 3.11.2012 11:30
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Doupak
Člen
Avatar
Odpovídá na David Čápka
Doupak:

Takto by pretovani neslo kvuli priorite operatoru. Operator tecka ma vetsi prioritu nez pretypovani. Takze by to muselo byt takto: ((Button)sender)­.Text = "xyz";

 
Nahoru Odpovědět 4.11.2012 21:01
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Doupak
David Čápka:

Tohle se mi vždycky pletlo, dík :)

Nahoru Odpovědět  +1 4.11.2012 21:05
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
dvorak_cz
Člen
Avatar
Odpovídá na matesax
dvorak_cz:

ahoj, potřebuji nasměrovat... mám dynamicky vytvořené button s tím, že mají název např. button3; button5; button9 atd. současně s nimi jsou vytvořené label se stejným názvem tz. label3; label5; label9 .... po kliknutí na jakýkoliv button potřebuji změnit i label který k němu náleží. tuším, že to bude přes sender ale netuším jak ... díky za pomoc

 
Nahoru Odpovědět 16.10.2014 14:59
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na dvorak_cz
Jan Vargovský:

Máš 2 možnosti:

  1. Udělat si user contorl, do něj hodit 2 tlačítka a když klikneš na tlačítko tak máš v instanci jediný label, který k němu patří.
  2. ze sendera si vzít jeho vlastnost Name, replacnout "button" -> "label" a vyhledat takový název v kolekci Controls (pomocí Find()).
 
Nahoru Odpovědět 16.10.2014 20:30
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 10 zpráv z 10.