【问题标题】:What happened to control arrays控制数组发生了什么
【发布时间】:2013-09-20 21:13:36
【问题描述】:

几年前,我曾经使用 Visual Basic 6 进行编程,我能够创建具有相同名称的对象,然后通过索引来区分它们。 例如,我们可以创建 TextBox1 和另一个 TextBox1 但具有不同的索引。 现在这个功能不再可用了! 目前,我正在使用 Visual Studio 2012。 有没有办法操纵VS2012再次启用该功能,或者有类似的东西,因为它真的很有帮助。

【问题讨论】:

    标签: vb.net visual-studio-2012 vb6 indexing


    【解决方案1】:

    现在很痛苦。

    MSDN 现已涵盖此主题:http://msdn.microsoft.com/en-us/library/aa289500%28v=vs.71%29.aspx

    VB6 万岁!

    【讨论】:

    • 感谢 bud,这又给了我希望 :D 虽然文章已经很老了 ;) viva VB6!
    【解决方案2】:

    今天完成类似事情的更简单方法是将所有这些控件放在一个公共父控件中。这个父级可以是一个组框、一个面板,甚至是表单本身。

    因此,如果您的表单上的所有复选框都需要编入索引,毫无例外,您无需执行任何特殊操作。如果只有一个复选框不同,则您需要该复选框具有与索引复选框不同的父控件。在这种情况下,您可以在复选框组下分层一个面板控件,或者您可以在不同的单个复选框下分层一个面板控件。任何一个都可以。

    稍后,您仍然无法通过索引访问这些复选框,但您可以将它们视为一个集合。您可以这样做:

    For Each box As CheckBox In Me.Controls.OfType(Of Checkbox)()
        'Do something with each checkbox
    Next
    

    或者如果你想知道哪些被选中:

    Dim checkedBoxes As IEnumerable(Of Checkbox) = Me.Controls.OfType(Of Checkbox)().Where(Function(b) b.Checked)
    

    如果你真的想要一个复选框数组,你可以使用这种技术来获得一个。只需将这样的代码放在表单的加载事件中:

    Dim checkBoxes() CheckBox = Me.Controls.OfType(Of CheckBox)().OrderBy(Function(b) b.Name).ToArray()
    

    【讨论】:

    • +1。唯一缺少的部分是展示如何在一个例程中处理所有事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2014-08-30
    • 2021-06-06
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多