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

  • 本文关键字:置文本 动态 VB6 vb6
  • 更新时间 :
  • 英文 :


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

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

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

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

您可以尝试使用表单的控件集合:

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, vbChecked, vbUnchecked)
   End If
Next

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

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,因此您可以简单地消除任何间隙。

使用 Textbox 控件数组可以共享如下所示的常用代码,这些代码在光标进入文本框时突出显示文本:

Private Sub Text1_GotFocus(Index As Integer)
    With Text1(Index)
        .SelStart = 0
        .SelLength = Len(.Text)
    End With
End Sub

相关内容

  • 没有找到相关文章

最新更新