Многомерный массив элементов управления - PullRequest
2 голосов
/ 18 ноября 2010

Я пишу приложение в VB.NET и сталкиваюсь со следующей проблемой.Я пытаюсь создать интерфейс, который позволит пользователю выбирать их доступность с учетом диапазона времени и дней недели.Я хочу создать элементы управления флажками в табличной форме с двумя индексами, которые я могу использовать для обозначения определенного временного диапазона и дня недели.Таблица выглядит примерно так:

            Sunday  Monday  Tuesday  Wednesday  Thursday  Friday  Saturday
1:00am       [x]     [x]      [x]       [x]        [x]     [x]       [x]
2:00am       [x]     [x]      [x]       [x]        [x]     [x]       [x]
3:00am       [x]     [x]      [x]       [x]        [x]     [x]       [x]
4:00am       [x]     [x]      [x]       [x]        [x]     [x]       [x]

... и так далее.Поэтому воскресенье @ 1:00 утра будет 0,1 - понедельник @ 1:00 утра будет 0,2 - и т. Д.

Я следил за найденной статьей здесь , которая создает и предоставляет массив управленияОднако это не многомерно.

Кто-нибудь знает подобный способ динамического генерирования элементов управления и сохранения их в многомерном массиве в VB.NET?

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 18 ноября 2010

Элемент управления является дорогим объектом. У вас их слишком много, рисование формы начнет заметно замедляться. Вместо этого используйте DataGridView, добавьте столбцы типа DataGridViewCheckBoxColumn.

1 голос
/ 19 ноября 2010

Вы можете рассмотреть возможность использования TableLayoutPanel в вашей форме.

Один из методов, который вы можете использовать, - это создание отдельных элементов управления, либо в конструкторе, если это сетка фиксированного размера, либо в программном коде для сетки переменного размера, и помещать их в (или добавлять их) ячейки сетки ,

Если вам нужно обработать события щелчка, вы можете связать события для всех элементов управления с одним обработчиком (описано в статье, на которую вы ссылались). Затем установите свойство тега каждого элемента управления, чтобы отразить расположение сетки. Например, если ваша сетка меньше десяти на десять, установите тег, используя целое число со столбцом в десятке и строкой в ​​одном месте. В подпрограмме-обработчике tou может определить, какой элемент управления был выбран, используя свойство sender.tag.

--- После дальнейшего чтения кажется, что вы можете использовать метод TableLayoutPanel GetPositionFromControl, чтобы получить позицию для определения элемента управления, вызвавшего событие, т.е. Я собираюсь попробовать это в моем коде позже, возможно, я смогу избавиться от тегов.

Если вам не нужно обрабатывать события, вы можете использовать метод GetControlFromLocation TablelayoutPanel для доступа к отдельным элементам управления.

Таким образом, вы можете использовать TableLayoutPanel в качестве двумерного управляющего массива без необходимости кодировать собственный массив.

...