• 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#

VPS Starter Arubacloud
0 głosów
304 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 130 wizyt
pytanie zadane 29 grudnia 2022 w C# przez Mati336 Użytkownik (560 p.)
0 głosów
1 odpowiedź 168 wizyt
0 głosów
1 odpowiedź 104 wizyt
pytanie zadane 23 marca 2021 w C# przez mateusz45 Gaduła (3,240 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...