Tablica buttonów jako obiekt

0

Witam, jestem nowy jeżeli chodzi o C#. Chciałem zrobić aplikację okienkową (Visual Studio) gdzie mamy tabelę 6x6 z liczbami oraz przyciski które kolorują cały wiersz/kolumnę i wypisują najmniejszą występującą w niej wartość.
Tak wygląda moja aktualna tablica buttonów:

    public partial class Form1 : Form
    {

        Button[,] tablica;
        public Form1()
        {
            


            InitializeComponent();
            TableLayoutPanel macierz = tableLayoutPanel2;
           
            int[,] dane = {{73,89,79,59,46,57},{40,16,72,42,72,44},{37,37,33,78,44,33},{33,49,68,15,52,44},{77,0,68,31,64,55},{91,42,65,42,53,66}};
            tablica =new Button[,]{{Button1,Button2,Button3,Button4,Button5,Button6,Button7,},
                                {Button8,Button9,Button10,Button11,Button12,Button13,Button14,},
                                {Button15,Button16,Button17,Button18,Button19,Button20,Button21,},
                                {Button22,Button23,Button24,Button25,Button26,Button27,Button28,},
                                {Button29,Button30,Button31,Button32,Button33,Button34,Button35,},
                                {Button36,Button37,Button38,Button39,Button40,Button41,Button42,},
                                {Button43,Button44,Button45,Button46,Button47,Button48,Button49,}};
           for (int i = 0; i < 6; i++)
                for (int j = 0; j < 6; j++)
                    tablica[i, j].Text = dane[i, j].ToString();
}

A tak wygląda kolorowanie kolumn:

        private void Button43_Click(object sender, EventArgs e)
        {
            int min=Int32.Parse(tablica[0,0].Text);
           for (int i = 0; i < 6; i++)
           {
            tablica[i,0].BackColor = Color.OrangeRed;
               int a=Int32.Parse(tablica[i,0].Text);
            if(min>a)
                min=a;

           }
           Button43.Text = min.ToString();
        } 

I teraz pytanie co zrobić, by uzyskać obiekt tablica której mógłbym nadać metodę np koloruj tak by eventy na buttonach wyglądały np. tak:

        private void Button43_Click(object sender, EventArgs e)
        {
            tablica1.koloruj(2,-1) //co miałoby kolorować drugą kolumne
        } 
1
  1. wpf czy winforms?
  2. czemu nie uzyjesz datagrida do tego?
  3. w tej formie to co robisz to tak srednio ma sensu (z tymi buttoami)
1

Kliknięty obiekt masz w argumencie sender, zrzutuj go sobie na Button.
Wszystkim przyciskom przypisz jedną i tę samą metodę obsługującą zdarzenie kliknięcia. Unikaj duplikowania kodu (zasada DRY).
Fatalnie nazywasz zmienne, co za miesiąc czy pół roku powie Ci nazwa tablica czy tablica1? Nazwy wszystkich obiektów powinieneś nazywać po angielsku.

0

komentarze sluza do offtopicu, jezeli jest na temat to po prostu odpowiedz.

http://stackoverflow.com/questions/16695885/binding-listt-to-datagridview-in-winform

to Ci sie pewnie przyda

  1. nie używaj tablic
  2. zamień wszystko na datagridview
  3. sadze ze daloby rade zrobic te przyciski jako pola w datagridview (wiec mialbys 7x7 a obrzeza gorne i lewe sluzyly by do zaznaczania) i wtedy nie potrzebujesz zadnych buttonow, ale moze ktos bedzie mial lepszy pomysl.
0
ŁF napisał(a):

Kliknięty obiekt masz w argumencie sender, zrzutuj go sobie na Button.
Wszystkim przyciskom przypisz jedną i tę samą metodę obsługującą zdarzenie kliknięcia.

Tutaj mam akurat problem ponieważ nie wiem jak ustalić adres buttona (aby uogólnić metoda musi najpierw zapytać się buttona którą kolumne koloruje). Jaka jest więc metoda która odczyta mi położenie buttona w tablicy?

0

nie ma takiej metody, musialbys napisac wlasna metode ktora szuka i zwraca indeksy.

0
fasadin napisał(a):

nie ma takiej metody, musialbys napisac wlasna metode ktora szuka i zwraca indeksy.

W sumie dałbym rade to zrobić na podstawie nazw i z użyciem splita ale faktycznie szybciej będzie jak to datagridem zrobię

0
            tablica =new Button[,]{{Button1,Button2,Button3,Button4,Button5,Button6,Button7,},
                                {Button8,Button9,Button10,Button11,Button12,Button13,Button14,},
                                {Button15,Button16,Button17,Button18,Button19,Button20,Button21,},
                                {Button22,Button23,Button24,Button25,Button26,Button27,Button28,},
                                {Button29,Button30,Button31,Button32,Button33,Button34,Button35,},
                                {Button36,Button37,Button38,Button39,Button40,Button41,Button42,},
                                {Button43,Button44,Button45,Button46,Button47,Button48,Button49,}};

Wywal to, wywal buttony jako kontrolki na formie, generuj je dynamicznie w pętli.

Każdy button miałby tę samą metodę Click. Masz w kontrolce właściwość Tag, w której możesz zawrzeć jakąś strukturę z koordynatami tablicy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1