Avatar
jirkulub
Člen
Avatar
jirkulub:

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
Posix
Člen
Avatar
Posix:

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
Proč to dělat jednoduše, když to jde složitě.
Avatar
martinsakra
Redaktor
Avatar
Odpovídá na jirkulub
martinsakra:

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:

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.