不知道这篇文章的标题是否准确。我试图通过在一个循环中“组成”它们的名称来访问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”属性的值,在某些情况下,我需要“ Value”的值财产;一般来说,我感兴趣的属性可能是i的函数。
干杯。
您可以使用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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句