Windows Form i tablica globalna

0

Cześć, jestem nowy w tym środowisku i potrzebuję zrobić tablicę której elementy będę mógł edytować w kilku miejscach programu, przez przyciski czy klikanie w picturebox.
tablica ma być również dynamiczna ponieważ jej rozmiar chciałbym wczytać z textboxów. Próbowałem to zrobić na kilka sposobów ale niezależnie od tego gdzie ją umieszczę w innych polach nie mam do niej dostępu. Kojarzy ktoś jak to rozwiązać?

        public Form1() 
        {
            Cell[,] tab = new Cell[sizex, sizey];
         }
        private void button1_Click(object sender, EventArgs e)
        {
	//tu chcę mieć dostęp do elementów
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            //tu chcę mieć dostęp do elementów
        }```


Ewentualnie, jak edytować tablicę tworzoną lokalnie w obszarze Button1_Click przez kliknięcie pictureBoxa?
0

Niech Cię nie kusi mix danych i GUI w jakimś spagetti. Trzeba oddzielić.

Co to za dane, bardziej jednorodne, czy "od sasa do lasa"?
Czy dużo małych prostych, czy mało, ale skomplikowanych struktur?
Wczytywane z pliku, czy tylko istniejące na czas działania programu itd.

Więcej szczegółów, to bardziej adekwatnie można doradzić.

0

Tworzę aplikację która będzie działać podobnie do Gry w życie, tworzę klasę komórka w której chce przechować jej współrzędne oraz aktualny kolor, chce aby w programie po kliknięciu na gotową siatkę w pictureboxie zmieniał się kolor wybranej komórki. Dlatego chcę aby po uzupełnieniu textboxów stworzyła się tablica komórek a następnie za pomocą pictureBox_click zmieniać poszczególne komorki, a buttonem na końcu przelecieć przez tablicę i kontynuować program już do końca.

1

Najpierw się wypowiem co do kodu, który podałeś. Zmienić go tzreba:

... class Form1 {
 private Cell[,] tab ;
 public Form1() 
        {
            tab = new Cell[sizex, sizey];
         }
        private void button1_Click(object sender, EventArgs e)
        {
    //tu chcę mieć dostęp do elementów
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            //tu chcę mieć dostęp do elementów
        }

To się formalnie nazywa, że tab już nie jest zmienną lokalną w konstruktorze (szalenie dziwna rzecz nawiasem mówiąc), tylko jest polem (inicjowanym w konstruktorze).

Rozwiązuje to najprościej dostępność. Ale są do tego zarzuty:
Siedzi to w klasie GUI, jest niefajne do rozwijania (przecież każda Cell będzie obrastała we właściwości i funkcjonalność itd... a i sama tablica też dostanie jakieś funkcjonalności). Moze będziesz chciał zachować chwilowy stan w pliku, aby wznowić następnego dnia itd...
To są argumenty za wyniesiem do innej klasy.

EDIT: NA przykład, jakbym robił "życie", bym zwirtualizował tablicę, tzn by była dostępna przez operator tablicowy (zwany indekserem lub indeksatorem w C#), a jej wewnętrzna implementacja by była ukryta przed publicznym kontaktem.

0

wpadłem na coś takiego,

public class Cell
        {
            public int x { get; set; }
            public int y { get; set; }
        }

        public void start()
        {
            int sizex = Int32.Parse(textBox1.Text);
            int sizey = Int32.Parse(textBox2.Text);

            Cell[,] tab = new Cell[sizex + 2, sizey + 2];
            for (int i = 0; i < sizex + 2; i++)
            {
                for (int j = 0; j < sizey + 2; j++)
                {
                    tab[i, j] = new Cell();
                    tab[i, j].x = i;
                    tab[i, j].y = j;
                }
            }
        }

ale chyba to nie do końca o to chodzi ponieważ program się niby kompiluje ale w buttonie tab dalej nie istnieje, idę w ogóle w dobrym kierunku? ewentualnie jak się to fachowo nazywa bo strasznie trudno znaleźć w internecie coś na ten temat, dzięki wielkie za pomoc w każdym razie

// teraz zauważyłem edit, dzięki, spróbuję w ten sposób

Dzięki, edytowałem lekko to co wysłałeś i działa, pewnie nie tak jak powinno ale na razie ma działać, bawię się z tym dalej :D

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