• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gdzie zrobiłem błąd? WindowsForms C#

Object Storage Arubacloud
0 głosów
317 wizyt
pytanie zadane 22 stycznia 2018 w C# przez lukaszvip166 Początkujący (300 p.)
edycja 23 stycznia 2018 przez lukaszvip166

Chcę napisać klasyczną grę w statki. Niestety już na początku mam mały problem. Jestem w trakcie pisania klasy Plansza. Plansza składa się ze 100 przycisków, które znajdują się w tablicy. Po wciśnięciu przycisku jego kolor powinien zmienić się na czerwony-niestety nie działa. Jeszcze takie pytanie, jeśli przyciski znajdują się w tablicy, to jak zrobić, żeby program wiedział sam który przycisk został wciśnięty i który ma mieć zmieniony kolor? Klasie jest przekazywana referencja do klasy Panel, w której to wyświetlają się przyciski.

 

   public class Plansza
    {
        int top=0;
        int left=0;
        Panel pole;
        Button[] plansza=new Button[100];
        
        public Plansza(Panel pole)
        {
            this.pole=pole;
            Wyglad();
        }
        
        void Wyglad()
        {
            for (int i=0;i<10;i++)
            {
                int y;
                for ( y=0; y<plansza.Length; y++)
                {
                    plansza[i]=new Button();
                    plansza[i].Width=30;
                    plansza[i].Height=30;
                    plansza[i].Left=left;
                    plansza[i].Top=top;
                    plansza[i].Click+=new EventHandler(Pudlo);
                    Color kolor=Color.FromName("Blue");
                    plansza[i].BackColor=kolor;
                    
                    pole.Controls.Add(plansza[i]);
                    left+=30;
                    
                }
                top+=30;
                left=0;
            }
            top=0;
            left=0;
            
        }
        private void Pudlo(object sender, System.EventArgs e)
        {
                Color kolor=Color.FromName("Red");
                plansza[0].BackColor=kolor;
        }
    }

 

komentarz 22 stycznia 2018 przez lukaszvip166 Początkujący (300 p.)
Nie korzystam z VisualStudio, bo pisząc w ten sposób mam zamiar więcej się nauczyć xD jeśli robię źle, to proszę o uwagi :)
komentarz 23 stycznia 2018 przez Jakub 0 Pasjonat (23,120 p.)
Daj kod w bloczek 'code'. Ja nie pomogę bo C# nie znam ale może wtedy zachęcisz innych ;)

* bo narazie taki kod się mega źle czyta,,,

1 odpowiedź

0 głosów
odpowiedź 23 stycznia 2018 przez piotrsz109 Stary wyjadacz (13,730 p.)
 public class Plansza
    {
        int top=0;
        int left=0;
        Panel pole;
        List<Button> plansza= new List<Button>();
        
        public Plansza(Panel pole)
        {
            this.pole=pole;
            Wyglad();
        }
        
        void Wyglad()
        {
            top=0;
            left=0;
            for (int i=0;i<10;i++)
            {
                int y;
                for ( y=0; y<plansza.Length; y++)
                {
                    plansza.Add(new Button());
                    plansza[i].Width=30;
                    plansza[i].Height=30;
                    plansza[i].Left=left;
                    plansza[i].Top=top;
                    plansza[i].Click+=new EventHandler(Pudlo);
                    plansza[i].BackColor=Color.FromName("Blue");
                    
                    pole.Controls.Add(plansza[i]);
                    left+=30;
                    
                }
                top+=30;
                left=0;
            }
            
        }
        internal void Pudlo(object sender, System.EventArgs e)
        {
                Color kolor=Color.FromName("Red");
                plansza[plansza.IndexOf((Button)sender)].BackColor=kolor;
        }
    }

Powinno działać. I zacznij korzystać z VS, bo takie pisanie w "notatniku" nic ci nie da oprócz bólu głowy.

komentarz 23 stycznia 2018 przez lukaszvip166 Początkujący (300 p.)
Niestety nie działa ;/
komentarz 23 stycznia 2018 przez piotrsz109 Stary wyjadacz (13,730 p.)
public class Plansza
   {
       int top=0;
       int left=0;
       Panel pole;
       List<Button> plansza= new List<Button>();
        
       public Plansza(Panel pole)
       {
           this.pole=pole;
           Wyglad();
       }
        
       void Wyglad()
       {
           top=0;
           left=0;
           for (int i=0;i<10;i++)
           {
               int y;
               for ( y=0; y<10; y++)
               {
                   plansza.Add(new Button());
                   plansza[i*10 + y].Width=30;
                   plansza[i*10 + y].Height=30;
                   plansza[i*10 + y].Left=left;
                   plansza[i*10 + y].Top=top;
                   plansza[i*10 + y].Click+=new EventHandler(Pudlo);
                   plansza[i*10 + y].BackColor=Color.FromName("Blue");
                    
                   pole.Controls.Add(plansza[i*10 + y]);
                   left+=30;
                    
               }
               top+=30;
               left=0;
           }
            
       }
       internal void Pudlo(object sender, System.EventArgs e)
       {
               Color kolor=Color.FromName("Red");
               plansza[plansza.IndexOf((Button)sender)].BackColor=kolor;
       }
   }

 

komentarz 23 stycznia 2018 przez lukaszvip166 Początkujący (300 p.)
Dzięki :) teraz wszystko jest OK:)

A możesz mi wytłumaczyć poniższy fragment?

plansza[plansza.IndexOf((Button)sender)].BackColor=kolor;
komentarz 23 stycznia 2018 przez piotrsz109 Stary wyjadacz (13,730 p.)
Odwołuje się do elementu listy o indeksie pobranym przez IndexOf, a to zwraca index podanego elementu. A wewnątrz jest rzutowanie na typ Button z object

Podobne pytania

0 głosów
0 odpowiedzi 135 wizyt
pytanie zadane 29 grudnia 2022 w C# przez Mati336 Użytkownik (560 p.)
0 głosów
1 odpowiedź 173 wizyt
0 głosów
1 odpowiedź 106 wizyt
pytanie zadane 23 marca 2021 w C# przez mateusz45 Gaduła (3,240 p.)

92,568 zapytań

141,421 odpowiedzi

319,628 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...