【问题标题】:Multi-dimensional Array of Controls控件的多维数组
【发布时间】:2010-11-18 20:13:00
【问题描述】:

我正在用 VB.NET 编写一个应用程序并面临以下问题。我正在尝试创建一个界面,允许用户在给定时间范围和一周中的几天的情况下选择他们的可用性。我想以表格形式创建带有两个索引的复选框控件,我可以使用它们来引用某个时间范围和一周中的某一天。该表如下所示:

周日 周一 周二 周三 周四 周五 周六 凌晨 1:00 [x] [x] [x] [x] [x] [x] [x] 凌晨 2:00 [x] [x] [x] [x] [x] [x] [x] 凌晨 3:00 [x] [x] [x] [x] [x] [x] [x] 凌晨 4:00 [x] [x] [x] [x] [x] [x] [x]

...等等。所以周日 @ 1:00am 将是 0,1 - 周一 @ 1:00am 将是 0,2 - 等等。

我关注了找到here 的文章,该文章创建并公开了一个控件数组, 但是它不是多维的。

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

提前致谢!

【问题讨论】:

    标签: vb.net winforms arrays multidimensional-array


    【解决方案1】:

    控件是一个昂贵的对象。你这里太多了,绘制表格会开始变得明显变慢。改用 DataGridView,添加 DataGridViewCheckBoxColumn 类型的列。

    【讨论】:

    • 好的,会调查的。谢谢
    • 虽然此答案不能反映您的问题,但它是更好的解决方案。然后,您将通过 Row then Cell 属性访问特定的单元格。
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      相关资源
      最近更新 更多