IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
jirkulub
Člen
Avatar
jirkulub:15.10.2013 10:35

Ahoj lidi,
potřeboval bych trochu pomoci. C# není můj hlavní programovací jazyk, ve škole děláme s C++ a chci pomoci kamarádovi se semestrálky na C#. Má vytvořit piškvorky. S algoritmem a ostatním si poradím v pohodě, ale mám problém s GUI.

Potřeboval bych si vytvořit pole buttonů 30x30, ty vložit do Formu. Toto jsem jakžtakž zvládl, problém nastává, když chci vytvořit metodu Click pro každý button zvlášť. Musí mít každý Button vlastní metodu i když to je pole? Nejde napsat jenom jednu univerzální

Můj zdrojový kód zatím vypadá nějak takhle:

using System;
// atd.

namespace Piskvorky
{
    public partial class HraciDeska : Form
    {
        public HraciDeska()
        {
            InitializeComponent();
        }



        protected void Clicked(int i, int j)
        {
            //Nevím jak zde napsat, aby metoda byla univerzální
            //i a j jsou souřadnice buttonu
            //Potřeboval bych něco jako pole[i,j].Text = "X";
        }

        private void HraciDeska_Load(object sender, EventArgs e)
        {
            int x = 0;
            Button[,] pole = new Button[30, 30];
            for (int i = 0; i < 30; i++)
            {
                for (int j = 0; j < 30; j++)
                {
                    pole[i, j] = new Button();
                    pole[i, j].Location = new Point(i * 20, j * 20);
                    pole[i, j].Size = new Size(20, 20);
                    pole[i, j].TabIndex = x++;
                    Controls.Add(pole[i, j]);
                }
            }

            pole[0, 0].Click += (senders, args) => { Clicked(0, 0); };
            pole[0, 1].Click += (senders, args) => { Clicked(0, 1); };
            // Nechce se mi sem vkládat metodu pro každý button ...
        }

    }
}

Moc děkuji za případnou odpověď, určuje to nějak musí jít, ale zatím jsem nikde nenašel postup, který by mi fungoval..

 
Odpovědět
15.10.2013 10:35
Avatar
Neaktivní uživatel:15.10.2013 10:58

Vytvoříš si jednu metodu
void button_click(object sender, nejake_eventArgs e)
{
a tady zjisštíš pomocí sender, na ktere tlacitko si klikl
}

pole[a, b].Click += button_click;

Nahoru Odpovědět
15.10.2013 10:58
Neaktivní uživatelský účet
Avatar
martinsakra
Tvůrce
Avatar
Odpovídá na jirkulub
martinsakra:15.10.2013 12:41

si si jistý že pole buttonů je dobrý nápad?
Dělali jsme tohle jako ukol ve cviku (za 60-90 min ve winforms) a pole buttonů/pictureboxů se nejevilo jako ideální.
Protože pokd si dovolil hráči měnit nastavení velikosti hrací plochy (což není na škodu + na semestrálku bych očekával že něhaký nastavený by to mít mělo) tak musíš buttony generovat/smazat nagenerovat znovu když se změni velikost hrací plochy a to někde od 30x30 a víš je pomalý a čím větší plocha tím horší. Stačí jeden picture box a na metodu klik si spočítáš který pole hráč myslel
viz třeba moje vlastní: http://www.itnetwork.cz/…ms-piskvorky

Nahoru Odpovědět
15.10.2013 12:41
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
jirkulub
Člen
Avatar
jirkulub:15.10.2013 14:32

Díky za odpovědi, myslím si, že tento návrh je samozřejmě naprosto otřesný, ale prosím nesuďte mě, snažím se pouze pomoci kamarádovi, který je ještě na střední a vycházel sem z toho, jak by to asi udělal on ... Každopádně se mi líbí ten jeden PictureBox :-) Děkuji za tip :-)

 
Nahoru Odpovědět
15.10.2013 14:32
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.