我在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现在是我正在使用的面板名称,但它不是面板本身的字符串)
答案 0 :(得分:1)
所有控件都在其父级Controls
集合中引用。因此,如果您要查找的面板是您表单的子级,则可以在表单的Controls
集合中查找。 Controls
集合由控件的名称编制索引,因此您可以通过名称轻松检索它们,如下所示:
Dim z As String = ...
Dim p As Panel = DirectCast(Me.Controls(z), Panel)
答案 1 :(得分: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并找到此选项卡上的所有面板。这将使我的代码比以前更加简化。谢谢你让我走上了正确的道路,史蒂文。