VB中Control无Value成员却有Text?进度条循环赋值报错求解
WinForms循环操作ProgressBar报错的原因与解决办法
问题原因
Me.Controls集合返回的是Control基类对象:
- TextBox的
Text属性是Control基类自带的成员,所以直接通过Me.Controls("TextBox_Analog" & i).Text访问完全没问题。 - ProgressBar的
Value属性是它自身类的特有属性,Control基类并没有这个成员,直接访问自然会报“Value不是Control的成员”错误。
解决方案
方案1:强制类型转换
把从Controls集合获取的对象转换成ProgressBar类型后再访问Value属性,推荐用TryCast做安全转换,避免因控件不存在引发额外错误:
For i As Integer = 0 To 7 Step 1 Dim targetPb As ProgressBar = TryCast(Me.Controls("GraphProgressBar" & i), ProgressBar) If targetPb IsNot Nothing Then targetPb.Value = PinStatesSTR(i) End If Next
如果确定控件一定存在,也可以用DirectCast直接转换:
For i As Integer = 0 To 7 Step 1 DirectCast(Me.Controls("GraphProgressBar" & i), ProgressBar).Value = PinStatesSTR(i) Next
方案2:提前创建ProgressBar数组
把所有需要操作的ProgressBar放到一个数组里,直接循环数组操作,这种方式更安全,还能避免控件嵌套在其他容器(比如Panel、GroupBox)里导致Me.Controls找不到的问题:
' 先定义包含所有进度条的数组 Dim progressBarArray() As ProgressBar = {GraphProgressBar0, GraphProgressBar1, GraphProgressBar2, GraphProgressBar3, GraphProgressBar4, GraphProgressBar5, GraphProgressBar6, GraphProgressBar7} ' 循环数组赋值 For i As Integer = 0 To progressBarArray.Length - 1 progressBarArray(i).Value = PinStatesSTR(i) Next
内容的提问来源于stack exchange,提问作者user233614
相关产品推荐
相关产品推荐

