按名称访问表单的控件

时间:2014-06-11 13:20:33

标签: vb.net winforms

不确定这篇文章的标题是否准确。 我试图通过在循环中“组合”他们的名称来访问Windows窗体控件及其属性,但我似乎无法找到相关文档。使用VB.net。基本上,我说有以下内容:

Dim myDt As New DataTable

Dim row As DataRow = myDt.NewRow()

row.Item("col01") = Me.label01.Text
row.Item("col02") = Me.label02.Text
'...
row.Item("colN") = Me.labelN.Text

我想写一个for循环而不是N个单独的指令。 虽然表达作业的左侧很简单,但是当涉及到右侧时我很难过:

For i As Integer = 1 to N
    row.Item(String.format("col{0:00}", i)) = ???
    ' ??? <- write "label" & i (zero-padded, like col) and use that string to access Me's control that has such name
Next

作为一个额外的,我希望能够将最终的“.Text”属性作为字符串传递,因为在某些情况下我需要“Text”属性的值,在其他情况下我需要的值“价值”财产;一般来说,我感兴趣的财产可能是我的一个功能。

干杯。

1 个答案:

答案 0 :(得分:4)

您可以使用ControlsCollection.Find方法,并将searchAllChildren选项设置为true

For i As Integer = 1 to N
    Dim ctrl = Me.Controls.Find(string.Format("label{0:00}", i), True)
    if ctrl IsNot Nothing AndAlso ctrl.Length > 0 Then
        row.Item(String.format("col{0:00}", i)) = ctrl(0).Text
    End If
Next

如何使用反射来设置使用字符串

标识的属性来解决问题的示例
Dim myLabel As Label = new Label()
Dim prop as PropertyInfo = myLabel.GetType().GetProperty("Text")
prop.SetValue(myLabel, "A Label.Text set with Reflection classes", Nothing)
Dim newText = prop.GetValue(myLabel)
Console.WriteLine(newText)