gpt4 book ai didi

vb.net - 使用名称变量访问多个表单控件

转载 作者:行者123 更新时间:2023-12-04 05:45:46 27 4
gpt4 key购买 nike

我正在尝试遍历一组 ComboBox 并使用连接的字符串和变量设置一个属性来表示控件的名称。但是,我无法让表单实例将 (String & Integer_Variable) 识别为其控件之一——因此它无法将任何适当的属性或子例程识别为 System.Windows.Forms 的成员。控制。

我找到了 DirectCast solution on SO它似乎有效(虽然我很怀疑),但这感觉像是一个非常笨拙的解决方案。有没有更干净的方法来做到这一点?

For myTempCount = 1 To 6
If tempValue < Me.("ComboBox" & myTempCount).Items.Count Then
ComboBox.SelectedIndex = tempValue 'appears to work -- how?
Me.ComboBox.SelectedIndex = tempValue 'appears to work

Me.("ComboBox" & myTempCount).SelectedIndex = tempValue 'doesn't work
Me.Controls.("ComboBox" & myTempCount).SelectedIndex = tempValue 'doesn't work

DirectCast(Me.Controls.Find(("ComboBox" & myTempCount), True)(0), ComboBox).SelectedIndex = tempValue 'appears to work
DirectCast(Me.Controls("ComboBox" & myTempCount), ComboBox).SelectedIndex = tempValue 'appears to work
Next

这段代码最初是 VBA/VB6,是我通过 ArtinSoft 的 Visual Basic Upgrade Companion (VBUC) 提交的。 FWIW,我使用的是 Microsoft Visual Basic 2010 Express。

最佳答案

回答您的问题:

  • ComboBox1.SelectedIndex之所以有效,是因为 ComboBox1 是表单的 ControlCollection
  • 中存在的控件
  • Me.ComboBoxPrinter1.SelectedIndex之所以有效,是因为 Me 是对您的 Form 类的引用,并且它引用了 Control。
  • Me.("ComboBoxPrinter" & myTempCount).SelectedIndex不起作用,因为字符串 ComboBoxPrinter & myTempCount是一个字符串而不是一个控件。
  • Me.Controls.("ComboBoxPrinter" & myTempCount).SelectedIndex由于相同的原因不起作用。
  • 其他两个实例有效,因为您使用字符串作为键来查找和返回您转换为正确类型的控件并设置您的属性。

  • 我个人通常使用 DirectCast 以外的 CType。主要区别依此 link CType 和 DirectCast 之间是 DirectCast 必须是确切的类型,因为 CType 可用于缩小或扩大转换。 DirectCast 更有效,尽管更挑剔。

    话虽如此,你可以做这样的事情:
    For myTempCount = 1 To 6
    If Controls.ContainsKey("ComboBox" & myTempCount) Then
    CType(Controls("ComboBox" & myTempCount), ComboBox).SelectedIndex = tempValue
    End If
    Next

    我没有在 Controls 前面使用 Me,因为它指的是同一个集合,如果您的控件在另一个集合中,您将需要使用该 Container。即如果您使用的是面板 Panel1.Controls.ContainsKey

    关于vb.net - 使用名称变量访问多个表单控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10711844/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com