2014-03-12 26 views
1

我正在使用VB.NET,而且我很新。我做的每一个按钮搜索面板上:VB.NET - 有没有一种方法可以获取面板的字符串名称并找到相关的面板?

For Each _x_ As Control In _y_.Controls 

我在Y作为一个字符串的名字,是有办法把这个字符串转换所关联的,所以我实际的面板或控制组不必为每个人单独编码?

有没有更简单的方法来做到这一点?

private function return_button(ByVal y As integer) 
Dim z As String = R_ + ToString(y) 

(Z现在是我使用的面板名称,但它是一个字符串,而不是面板本身)

回答

1

所有的控件都在其父母的Controls集合引用。因此,如果您要查找的面板是您的表单的孩子,您可以在表单的Controls集合中查找它。该Controls收集由控件的名称索引,所以您可以通过名称方便地检索它们,就像这样:

Dim z As String = ... 
Dim p As Panel = DirectCast(Me.Controls(z), Panel) 
+0

我试图DirectCast,我得到一个错误: System.NullReferenceException:对象引用未设置为对象的实例。 任何想法可能会导致这种情况下,这种情况下? – NationWidePants

+0

您在执行'DirectCast'的代码行上出现错误?或者当你尝试使用'p'时,你会得到错误? –

+0

对不起,错误出现在“For Each”行,它似乎取消引用控件中的任何对象?我假设这是我所看到的,因为它陈述为空。正如我所说,我是VB和Windows编程的新手 – NationWidePants

0

我想出一个解决这个问题。无论出于何种原因,它都不允许我将变量转换为实例化的值,它始终保持为空/无。所以不是我写的:

Dim p As String = "<String related to the panel I am looking for>" 
Dim panel() = Me.Controls.Find(p, true) 

现在我可以证明面板等于致电:

MsgBox(panel(0).GetHashCode = <panel name>.GetHashCode) 

和现在肯定他们是同一对象,所以我做了一个for循环,并与合作面板。现在我可以循环查看整个TabPage并在此选项卡上查找所有面板。这将使我的代码比以前更精简。谢谢你让我走在正确的道路上,史蒂文。

相关问题