多维控件数组

时间:2010-11-18 20:13:00

标签: vb.net winforms arrays multidimensional-array

我正在用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 am将是0,1 - 周一@ 1:00 am将是0,2 - 等等。

我按照文章here创建并公开了一个控件数组, 但它不是多维的。

有没有人知道类似的方法来动态生成控件并将它们存储在VB.NET中的多维数组中?

提前致谢!

2 个答案:

答案 0 :(得分:3)

控件是一种昂贵的对象。你在这里有太多,绘画表格将开始变得明显变慢。请改用DataGridView,添加DataGridViewCheckBoxColumn类型的列。

答案 1 :(得分:1)

您可能需要考虑在表单中使用TableLayoutPanel。

您可以使用的一种方法是在设计器中创建单个控件(如果它是固定大小的网格),或者在可变大小网格的程序代码中创建,并将它们放入(或添加到)网格单元格中。

如果您需要处理点击事件,可以将所有控件的事件绑定到单个处理程序(在您链接到的文章中描述)。然后,设置每个控件的tag属性以反映网格位置。例如,如果您的网格小于十乘十,请使用整数设置标记,其中列为十位数,行为一位。在处理程序例程中,tou可以使用sender.tag属性判断单击了哪个控件。

---进一步阅读后,您可以使用TableLayoutPanel GetPositionFromControl方法来确定触发事件的控件的位置,即:tableName.GetPositionFromControl(sender)。我将在稍后的代码中尝试,也许我可以摆脱标签。

如果您不需要处理事件,可以使用TablelayoutPanel GetControlFromLocation方法来访问各个控件。

因此,实际上,您可以使用TableLayoutPanel作为二维控件数组,而无需编写自己的数组。