如何在VB6中动态设置文本框值

我想用数据库值动态设置一些文本框值。

我尝试使用类似于下面的内容,但是出现以下编译错误: 无法分配为只读属性。 .name = 突出显示。

是否可以通过这种方式分配文本框值?

Dim x As Integer
 For x = 1 To 30
 Form1.RS.Fields(x).Name = RS.Fields(x).Value
Next
yjukhdxfv 回答:如何在VB6中动态设置文本框值

您可以尝试使用以下形式的控件集合:

Dim x As Integer
For x = 1 To 30
   Form1.Controls(RS.Fields(x).Name).Text = RS.Fields(x).Value
Next
,

作为对Eddi的回答,下面的代码允许在表单上使用多种控件类型:

Dim x As Integer

For x = 1 To 30
   If TypeOf Me.Controls(RS.Fields(x).Name) Is TextBox Then
      Me.Controls(RS.Fields(x).Name).Text = RS.Fields(x).Value
   ElseIf TypeOf Me.Controls(RS.Fields(x).Name) Is CheckBox Then
      Me.Controls(RS.Fields(x).Name).Value = _
         IIf(RS.Fields(x).Value = 1,vbChecked,vbUnchecked)
   End If
Next

以上代码的一个缺点是智能感知的丢失。您可以像下面这样构造代码,以便对其进行强类型化,这具有许多优点,包括智能感知:

Dim tb As TextBox
Dim cb As CheckBox
Dim x As Integer

For x = 1 To 30
   If TypeOf Me.Controls(RS.Fields(x).Name) Is TextBox Then
      Set tb = Me.Controls(RS.Fields(x).Name)
      tb.Text = RS.Fields(x).Value
   ElseIf TypeOf Me.Controls(RS.Fields(x).Name) Is CheckBox Then
      Set cb = Me.Controls(RS.Fields(x).Name)
      cb.Value = IIf(RS.Fields(x).Value = 1,vbUnchecked)
   End If
Next
,

假设您有一个索引数组,其中Text1个文本框的索引从1到30,则可以使用:

Dim iCounter As Integer
For iCounter = 1 To 30
   ' Check that counter is within the bounds of the Text1 array
   If iCounter >= Text1.LBound And iCounter <= Text1.UBound Then
       Text1(iCounter).Text = RS.Fields(iCounter).Value
   End If
Next

这里有额外的代码来检查计数器是否在Text1数组的范围内。 Text1数组的LBound和UBound值之间可能存在间隙(缺少项),因此它不是完美的。例如,您可以删除Text1(13)并仍然具有LBound = 1和UBound =30。最简单的方法是检查错误'340'(如果决定添加)。由于您正在构建UI,因此只需消除所有空白即可。

使用文本框控件数组,可以共享以下通用代码,当光标进入文本框时,该代码将突出显示文本:

Private Sub Text1_GotFocus(Index As Integer)
    With Text1(Index)
        .SelStart = 0
        .SelLength = Len(.Text)
    End With
End Sub
本文链接:https://www.f2er.com/3056426.html

大家都在问