我正在用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中的多维数组中?
提前致谢!
答案 0 :(得分:3)
控件是一种昂贵的对象。你在这里有太多,绘画表格将开始变得明显变慢。请改用DataGridView,添加DataGridViewCheckBoxColumn类型的列。
答案 1 :(得分:1)
您可能需要考虑在表单中使用TableLayoutPanel。
您可以使用的一种方法是在设计器中创建单个控件(如果它是固定大小的网格),或者在可变大小网格的程序代码中创建,并将它们放入(或添加到)网格单元格中。
如果您需要处理点击事件,可以将所有控件的事件绑定到单个处理程序(在您链接到的文章中描述)。然后,设置每个控件的tag属性以反映网格位置。例如,如果您的网格小于十乘十,请使用整数设置标记,其中列为十位数,行为一位。在处理程序例程中,tou可以使用sender.tag属性判断单击了哪个控件。
---进一步阅读后,您可以使用TableLayoutPanel GetPositionFromControl方法来确定触发事件的控件的位置,即:tableName.GetPositionFromControl(sender)。我将在稍后的代码中尝试,也许我可以摆脱标签。
如果您不需要处理事件,可以使用TablelayoutPanel GetControlFromLocation方法来访问各个控件。
因此,实际上,您可以使用TableLayoutPanel作为二维控件数组,而无需编写自己的数组。