/ / Wielowymiarowa tablica kontroli - vb.net, winforms, tablice, tablica wielowymiarowa

Wielowymiarowy Array of Controls - vb.net, winformy, tablice, tablica wielowymiarowa

Piszę aplikację w VB.NET i zmierzyć się z następującym problemem. Usiłuję utworzyć interfejs, który pozwoli użytkownikowi wybrać jego dostępność, biorąc pod uwagę zakres razy i dni tygodnia. Chcę utworzyć formanty pól wyboru w formie tabelarycznej z dwoma indeksami, których mogę użyć w odniesieniu do określony przedział czasowy i dzień tygodnia. Tabela wygląda mniej więcej tak:

Niedziela poniedziałek wtorek środa czwartekPiątek sobota 1:00 [x] [x] [x] [x] [x] [x] [x] 2:00 rano [x] [x] [x] [x] [x] [x] [x] 3:00 rano [x] [x] [x] [x] [x] [x] [x] 4:00 [x] [x] [x] [x] [x] [x] [x]

... i tak dalej. Tak więc niedziela o 1:00 to 0,1 - poniedziałek o 1:00 to 0,2 - itd.

Śledziłem znaleziony artykuł tutaj który tworzy i udostępnia tablicę kontrolną, jednak nie jest wielowymiarowy.

Czy ktoś zna podobny sposób dynamicznego generowania kontrolek i przechowywania ich w wielowymiarowej tablicy w VB.NET?

Z góry dziękuję!

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz rozważyć użycie TableLayoutPanel w swoim formularzu.

Jedną z metod, której można użyć, jest utworzenieposzczególne elementy sterujące, albo w projektancie, jeśli jest to siatka o stałym rozmiarze, albo w kodzie programu dla siatki o zmiennym rozmiarze i umieść je w komórkach siatki (lub dodaj je).

Jeśli chcesz obsłużyć zdarzenia kliknięcia, możeszpowiązać zdarzenia dla wszystkich kontrolek z pojedynczym modułem obsługi (opisanym w artykule, z którym się łączysz). Następnie ustaw właściwość znacznika każdego elementu sterującego, aby odzwierciedlał położenie siatki. Na przykład, jeśli siatka ma mniej niż dziesięć na dziesięć, ustaw znacznik za pomocą liczby całkowitej z kolumną z cyfrą dziesiątek i wierszem w jednym miejscu. W procedurze obsługi tou może stwierdzić, która kontrolka została kliknięta za pomocą właściwości sender.tag.

--- Po dalszym czytaniu wydaje się, że tymógłby użyć metody GetPositionFromControl TableLayoutPanel, aby uzyskać pozycję kontrolki, która uruchomiła zdarzenie, tj .: tableName.GetPositionFromControl (nadawca). Spróbuję tego później w moim kodzie, może uda mi się pozbyć tagów.

Jeśli nie musisz obsługiwać zdarzeń, możesz użyć metody GetControlFromLocation TablelayoutPanel, aby uzyskać dostęp do poszczególnych kontrolek.

W efekcie możesz użyć TableLayoutPanel jako dwuwymiarowej tablicy kontrolnej bez konieczności kodowania własnej tablicy.


3 dla odpowiedzi № 2

Sterowanie jest kosztownym przedmiotem. Jest ich tu zbyt wiele, malowanie formularza zacznie się zauważalnie wolniejsze. Zamiast tego użyj DataGridView, dodaj kolumny typu DataGridViewCheckBoxColumn.