我的程序有很多个功能界面
每个界面上都有很多个TextBox
现在的要求是,当每一个TextBox在得到焦点的时候,它的背景色要变蓝
失去焦点的时候,背景色又恢复为白色
能不能不一个个地设,用钩子或其它办法来解决?

解决方案 »

  1.   

    Private Sub Text1_GotFocus()    ’得到焦点Text1.BackColor = RGB(0, 0, 255)
    End Sub
    ---------------------------------------------
    Private Sub Text1_LostFocus()   ’失去焦点
    Text1.BackColor = RGB(255, 255, 255)
    End Sub多简单啊!!!!
      

  2.   

    TO:: helanshan() 
    这样的问题当然是使用控件数组来解决,虽然只有一句代码,但是如果有100个TEXT呢?那不是就要写100句啦?既麻烦,又影响程序的可读性,而且一旦程序的需求发生变化,你就要每一句都修改,那不是更麻烦了吗?
    楼主在窗体上点中一个TEXT控件,按“CTRL+C”再按“CTRL+V”VB就会问你是否要创建空间数组了。
    你的程序中写:
    SUB TEXT1_GETFORCUS(INDEX AS INTEGER )   ’系统生成的事件
    TEXT1(INDEX).BACKCOLOR=VBBLUE
    END SUB
    SUB TEXT1_LOSTFORCUS(INDEX AS INTEGER )   ’系统生成的事件
    TEXT1(INDEX).BACKCOLOR=VBWHITE
    END SUB
    这样就可以了。
      

  3.   

    我给 你写个过程调用好了
    Public Sub setcol(a As TextBox)
    a.BackColor = RGB(0, 0, 255)
    End Sub
    Public Sub setbul(a As TextBox)
    a.BackColor = RGB(255, 255, 255)
    End Sub
    调用就好了,参数是改变的文本框 最好是每个窗体用控件数组
      

  4.   

    如果是用.NET你就爽啦.非常简单.只要在每一个页面加一句话就行了.
    执行一个类的方法.
    在该类中循环遍历各个控件,用AddHandler将其getfocus,lostfocus事件引出来,加上颜色处理就OK了.
      

  5.   

    在所有文本框的GETFORCUS事件中调用setcolorsub setcolor()
        Dim ctl as object
        
        for each ctl in me.controls
            if typeof ctl is textbox then
                if ctl is me.activecontrol then
                    ctl.backcolor=vbblue
                else
                    ctl.backcolor=vbwhite
                end if
            end if
        next
        
    end sub
      

  6.   

    下面的例子用类控制控件(可以是TextBox, PictureBox, ComboBox)GetFocus时改变其背景的颜色,LostFocus时又恢复原来的颜色,大家可以根据自己的需要来修改:'[EventRaiser.cls]
    Option Explicit
    Public Event Focus(Sender As Control)
    Private Classes As New CollectionPublic Sub AddControls(ParamArray Controls())
    Dim ec As EventCatcher
    Dim ctl
      For Each ctl In Controls
        Set ec = New EventCatcher
        ec.Attach ctl, Me
        Classes.Add ec
      Next
    End SubPublic Sub Dispose()
    Dim Item
      For Each Item In Classes
        Item.Dispose
      Next
      Set Classes = Nothing
    End SubFriend Sub OnFocus(Sender As Control)
      RaiseEvent Focus(Sender)
    End Sub' [ EventCatcher.cls ]
    Option Explicit
    Private Parent As EventRaiser
    Private WithEvents TXT As TextBox
    Private WithEvents CMB As ComboBox
    Private WithEvents PIC As PictureBox
    '....可以增加其它类型的控件Public Sub Attach(Item As Variant, Source As EventRaiser)
      Set Parent = Source
      If TypeOf Item Is TextBox Then
        Set TXT = Item
      ElseIf TypeOf Item Is ComboBox Then
        Set CMB = Item
      ElseIf TypeOf Item Is PictureBox Then
        Set PIC = Item
      End If
    End SubPublic Sub Dispose()
      Set Parent = Nothing
      Set TXT = Nothing
      Set CMB = Nothing
      Set PIC = Nothing
    End Sub
    Private Sub CMB_GotFocus()
      FocusEvent CMB
    End SubPrivate Sub CMB_LostFocus()
      CMB.BackColor = Val(CMB.Tag)
    End SubPrivate Sub PIC_GotFocus()
      FocusEvent PIC
    End SubPrivate Sub PIC_LostFocus()
      PIC.BackColor = Val(PIC.Tag)
    End SubPrivate Sub TXT_GotFocus()
      FocusEvent TXT
    End SubPrivate Sub TXT_LostFocus()
      TXT.BackColor = Val(TXT.Tag)
    End SubPrivate Sub FocusEvent(Item As Control)
      Item.Tag = CStr(Item.BackColor)
      Item.BackColor = vbYellow
      ' Raises event back to form
      Parent.OnFocus Item
    End Sub使用时候只要加入上面是两个类,然后加入下面的代码:
    ' [ Form1.frm ]
    Option Explicit
    Private WithEvents Raiser As EventRaiserPrivate Sub Form_Load()
      Set Raiser = New EventRaiser
      '把所有需要改变背景颜色的控件加入
      Raiser.AddControls txtName, txtAddr, txtTel, picPhoto, cboSex  
    End SubPrivate Sub Form_Unload(Cancel As Integer)
      Raiser.Dispose
    End Sub
      

  7.   

    使用控件数组,用WallesCai(我是老蔡,不是泡菜!) 的方法
      

  8.   

    扩充text控件,修改SetFoucse 和losefocuse属性。