我的程序有很多个功能界面
每个界面上都有很多个TextBox
现在的要求是,当每一个TextBox在得到焦点的时候,它的背景色要变蓝
失去焦点的时候,背景色又恢复为白色
能不能不一个个地设,用钩子或其它办法来解决?
每个界面上都有很多个TextBox
现在的要求是,当每一个TextBox在得到焦点的时候,它的背景色要变蓝
失去焦点的时候,背景色又恢复为白色
能不能不一个个地设,用钩子或其它办法来解决?
解决方案 »
- VB打包,找不到dll
- 如果获得被点击控件的信息啊?
- 关于用vbs自动安装软件?
- 怎样检查RS的数据有没有!!!!!!!!!!!!
- 关于数据库OLE对象问题?????????????
- 请问vb中可以实现打印预览效果的控件!
- 用DataReport8.0做的报表怎么设置打印纸张的大小?
- mschart控件的用法
- 如何做出类似Office或delphi的图片文件选择对话框?
- 如何检测是否有打印机?
- RichTextBox1.SaveFile "C:\1.TXT",0 这样保存为什么。还有是有格式符?
- 利用setupbuilder制作安装程序(把一些jsp程序拷贝到用户指定的文件夹下),安装完毕后自动运行一个VB程序来修改一个已经拷贝到硬盘上的j
End Sub
---------------------------------------------
Private Sub Text1_LostFocus() ’失去焦点
Text1.BackColor = RGB(255, 255, 255)
End Sub多简单啊!!!!
这样的问题当然是使用控件数组来解决,虽然只有一句代码,但是如果有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
这样就可以了。
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
调用就好了,参数是改变的文本框 最好是每个窗体用控件数组
执行一个类的方法.
在该类中循环遍历各个控件,用AddHandler将其getfocus,lostfocus事件引出来,加上颜色处理就OK了.
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
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