【问题标题】:VB.Net Form DirectCast on Forms.PanelForms.Panel 上的 VB.Net 表单 DirectCast
【发布时间】:2013-05-09 21:14:57
【问题描述】:

我需要遍历表单的文本框,这些文本框位于面板内。我正在尝试这样做......

For Each Cntrl As Control In DirectCast(Me.Controls(PanelName), Panel).Controls

next

我需要将面板的名称提供给循环的原因是因为我有两个面板存在于 2 个不同的 TabPages 中。每个 TabPage 上都有一个执行相同功能的按钮,但面板和文本框的名称不同。我在处理两个 TabPage 按钮点击的函数中有循环,因此我需要循环指向右侧面板。

“PanelName”与目标面板的名称相匹配,面板属于 System.Windows.Form.Panel。

我得到“对象引用未设置为对象的实例”。信息。

这不可能吗?

【问题讨论】:

  • 也许是一个愚蠢的问题,但你确定在你这样做的时候(A)面板没有被删除或重命名,并且(B)InitializeComponent()已经被调用?

标签: vb.net


【解决方案1】:

无需投射:

For Each Cntrl As Control In PanelName.Controls

Next

如果您只有面板的名称而不是控件引用,那么您至少需要知道哪个 TabPage 有面板:

For Each ctrl As Control In TabControl1.TabPages(1).Controls("panel1").Controls

Next

或者,您可以使用:

Me.Controls.Find(PanelName, True)

在递归搜索子控件时按名称返回面板。

【讨论】:

  • 感谢 LarsTech。这是我需要的,但我在描述情况时做得很糟糕。我已经编辑了我的问题,希望它能更好地解释它。
  • @JoeB 这些面板是动态创建的吗?在您发布的代码中,Me.Controls 将不起作用,因为面板位于您的 TabPage.Controls 集合中。
猜你喜欢
  • 1970-01-01
  • 2011-02-10
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
相关资源
最近更新 更多