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 № 1Moż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.