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

0 głosów
671 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 228 wizyt
pytanie zadane 29 grudnia 2022 w C# przez Mati336 Użytkownik (560 p.)
0 głosów
1 odpowiedź 398 wizyt
0 głosów
1 odpowiedź 355 wizyt
pytanie zadane 23 marca 2021 w C# przez mateusz45 Gaduła (3,300 p.)

93,604 zapytań

142,526 odpowiedzi

322,991 komentarzy

63,088 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

Kursy INF.02 i INF.03
...