VB的ActiveX用户控件
VB自定义控件默认是器具了用户控件类,自定义控件的事件都可以通过实现用户控件的事件来实现
用户控件类常用事件包括:
事件AccessKeyPress(KeyAscii作为整数)
当控制的用户按下控件的访问键,或者按下回车键时,当开发商已经设置默认属性设置为True时,或按下Esc键时,当开发商已经设置取消属性为True 。 默认属性和取消财产被控制设置DefaultCancel属性为True的作者启用。
事件点击()当用户按下并释放在一个对象鼠标按钮时发生。
事件DBLCLICK()发生,当用户按下并释放鼠标按键
然后按下并在一个对象再次释放它。
事件的DragDrop(来源作为控制,X为单,Y单)
当完成一拖和拖放操作时发生。
事件的dragover(来源作为控制,X为单,Y单,国家作为整数)
当拖动和拖放操作过程中出现。
事件EnterFocus() 当焦点进入控件时发生。本身可以接收焦点的控制,
或子控件可以接收焦点。
事件ExitFocus() 当焦点离开控件时发生。本身可以失去焦点的控制,
或子控件可能失去焦点。
事件的GotFocus()当一个对象接收焦点时发生。
事件引发LostFocus() 当一个对象失去焦点时发生。
事件GetDataMember(数据成员,作为字符串数据作为对象)
当数据消费者问这个数据源为它的数据成员之一发生。
事件显示()发生时,控件的Visible属性更改为True。
事件隐藏()发生时,控件的Visible属性更改为False。
事件的HitTest(X为单,Y单,HitResult作为整数)
发生在响应鼠标活动一个没有窗户的用户控件。
事件初始化() 当应用程序创建一个窗体,mdi窗体或类的实例时发生。
事件终止() 时,所有引用到发生在窗体,mdi窗体或类的一个实例
从存储器中删除。
事件InitProperties() 发生第一次创建用户控制或用户文档。
子的PropertyChanged([属性名])
通知容器上用户控件的属性已经改变。
事件ReadProperties(PropBag作为的PropertyBag)
当一个用户控件或用户文档被要求从文件中读取其数据时发生。
事件WriteProperties(PropBag作为的PropertyBag)
当一个用户控件或用户文档被要求将其数据写入一个文件时发生。
事件的KeyDown(邀请码为整数,按住Shift键作为整数)
当用户按下一个键,一个对象具有焦点时发生。
事件的KeyPress(KeyAscii作为整数)
当用户按下并释放一个ANSI键时发生。
事件的KeyUp(邀请码为整数,按住Shift键作为整数)
当用户释放的关键,而一个对象具有焦点时发生。
事件的MouseDown(按钮为整数,按住Shift键为整数,X为单,Y单)
当用户按下了鼠标按键的对象具有焦点时发生。
事件涂料()时发生窗体或PictureBox控件中的任何一部分被移动,放大,或暴露。
事件调整大小()当窗体第一次显示或发生的对象的大小改变
本例通过实现一个只限输入数字的文本框的自定义控件为例,来了解VB自定义控件的实现
1.创建一自定义NumericInput,在自定义控件中加入一文本框txtInput
2.实现当改变自定义控件大小时,txtInput文本框能自动填充满整个自定义控件区域。可通过实现用户控件的调整大小事件
公开声明函数的MoveWindow库“USER32”(BYVAL HWND长,BYVAL x As中龙,BYVALÿ长,_
BYVAL nWidth长,BYVAL nHeight参数长,BYVAL bRepaint长)只要
公共职能Twip2Pixel(X)作为整数
昏暗的CX 只要
昏暗的CY 只要
CX = Screen.TwipsPerPixelX
CY = Screen.TwipsPerPixelY
Twip2Pixel = X / CX
结束功能
私人小组MoveControl(Ctrl键控制,BYVAL离开了作为整数,BYVAL顶级整数,_
BYVAL宽度为整数,BYVAL高度整数)
昏暗LRESULT只要
在错误恢复下一页
如果宽度<0,则宽度= 0
如果高度<0,则高度= 0
LRESULT =的MoveWindow(ctrl.hwnd,_
Twip2Pixel(左),Twip2Pixel(顶部),Twip2Pixel(宽),Twip2Pixel(高度),1)
“*如果改变大小失败,则直接改变
如果LRESULT = 0。然后 ctrl.Move左侧,顶部,宽度,高度
结束小组
私人小组UserControl_Resize()
MoveControl txtInput,0,0,UserControl.ScaleWidth,UserControl.ScaleHeight
结束小组
3. 为自定义控件添加属性
为控件添加对齐属性,属性有四个选项左对齐/右对齐/中心/综合来控制文本框的对齐
公共枚举AlignmentConstants
[左对齐] = 0
[右对齐] = 1
[心] = 2
[常规] = 3
[用户定义] = 4
结束枚举
私人m_Alignment作为AlignmentConstants
'属性必须是公共的,选项是枚举/布尔类型
公共属性获取对齐方式()作为AlignmentConstants
对齐= m_Alignment
高端物业
公共属性让对齐方式(值AlignmentConstants)
m_Alignment =价值
PropertyChanged的“对齐”
高端物业
ReadProperties和WriteProperties事件用来保存和读取属性改变后的值,否则每次更新控件都是使用默认属性值
私人小组UserControl_ReadProperties(PropBag作为的PropertyBag)
对齐= PropBag.ReadProperty(“对齐”,0)
结束小组
私人小组UserControl_WriteProperties(PropBag作为的PropertyBag)
呼叫PropBag.WriteProperty(“对齐”,对齐,0)
结束小组
4. 为自定义控件添加事件
为自定义控件添加点击事件,当单击txtInput时发生
事件单击()
私人小组txtInput_Click()
点击的RaiseEvent
结束小组
5. 扩充,将自定义控件扩充为组合的控件
Win32 API中提供的DrawFrameControl函数用于描绘一个标准控件,可描绘一个按钮或滚动条的帧,在本例中,将txtInput扩充,在txtInput右侧增加一按钮,使txtInput成为一个选择框
DrawFrameControl API函数定义如下
声明功能DrawFrameControl库“USER32”(
BYVAL的hDC长,_ '要在其中作画的设备场景
LPRECT作为RECT,_ '指定帧的位置及大小的一个矩形
BYVAL UN1长,_ '指定帧类型的一个常数
BYVAL UN2只要_ '一个常数,指定欲描绘的帧的状态。
)只要 '非零表示成功,零表示失败
“帧类型常数包括
私人常量DFC_CAPTION = 1 '标题栏
私人常量DFC_MENU = 2 '菜单
私人常量DFC_SCROLL = 3 '滚动条
私人常量DFC_BUTTON = 4 “标准按钮
“帧状态常数包括
私人常量DFCS_CAPTIONCLOSE = H0 '关闭按钮
私人常量DFCS_CAPTIONMIN =&H1 '最小化按钮
私人常量DFCS_CAPTIONMAX =&H2 '最大化按钮
私人常量DFCS_CAPTIONRESTORE = H3 '还原按钮
私人常量DFCS_CAPTIONHELP =&H4 '仅Windows 95:帮助按钮
私人常量DFCS_MENUARROW = H0 '子菜单箭头
私人常量DFCS_MENUCHECK =&H1 '复选标记
私人常量DFCS_MENUBULLET =&H2 '子弹
私人常量DFCS_MENUARROWRIGHT = H4
私人常量DFCS_SCROLLUP = H0 滚动条的“向上箭头
私人常量DFCS_SCROLLDOWN =&H1 '滚动条的向下箭头
私人常量DFCS_SCROLLLEFT =&H2 '滚动条的左箭头
私人常量DFCS_SCROLLRIGHT = H3 “滚动条向右箭头
私人常量DFCS_SCROLLCOMBOBOX = H5 '组合框滚动的酒吧
私人常量DFCS_SCROLLSIZEGRIP =&H8 '大小握
私人常量DFCS_SCROLLSIZEGRIPRIGHT =&H10 '尺寸握在窗口的右下角
私人常量DFCS_BUTTONCHECK = H0 “复选框
私人常量DFCS_BUTTONRADIO =&H4 “单选按钮
私人常量DFCS_BUTTON3STATE =&H8 '三种状态的按钮
私人常量DFCS_BUTTONPUSH =&H10 '按钮
私人常量DFCS_INACTIVE =&H100 “按钮不可用(灰色)
私人常量DFCS_PUSHED =&H200 '按钮被按下
私人常量DFCS_CHECKED =&H400 '按钮被选中
私人常量DFCS_ADJUSTRECT =&H2000 '边界矩形调整为排除周边
按钮的“边缘
私人常量DFCS_FLAT =&H4000 '按钮有一个平坦的边界
私人常量DFCS_MONO =&H8000 '按钮具有单色边界
“绘制文本常量
私人常量DT_CENTER = H1
私人常量DT_LEFT = H0
私人常量DT_RIGHT = H2
私人常量DT_VCENTER = H4
私人常量DT_SINGLELINE =&H20
私人小组抽签()
如果txtInput.Locked或不txtInput.Enabled然后
MoveControl txtInput,0,0,UserControl.ScaleWidth,UserControl.ScaleHeight
其他
如果UserControl.BorderStyle = 1,则
MoveControl txtInput,0,0,UserControl.width - 300,UserControl.Height
其他
MoveControl txtInput,0,0,UserControl.width - 250,UserControl.Height
万一
呼叫drawPushButton(假)
万一
结束小组
私人小组drawPushButton(被推为布尔) '*绘制按钮
昏暗的RC 作为RECT
GetWindowRect UserControl.hwnd,RC
rc.Right = rc.Right - rc.Left
如果UserControl.BorderStyle = 1,则
如果UserControl.Appearance = 1,则
rc.Bottom = rc.Bottom - rc.Top - 3
rc.Right = rc.Right - 3
其他
rc.Bottom = rc.Bottom - rc.Top - 2
rc.Right = rc.Right - 2
万一
其他
rc.Bottom = rc.Bottom - rc.Top
万一
rc.Left = Twip2Pixel(txtInput.width)
rc.Top = 0
UserControl.Cls
DrawFrameControl UserControl.hdc,RC,DFC_BUTTON + DFCS_BUTTONPUSH,_
DFCS_ADJUSTRECT + DFCS_BUTTON3STATE
“*绘制文本
如果然后推
rc.Right = rc.Right + 1
rc.Bottom = rc.Bottom + 1
万一
DrawText的UserControl.hdc,“...”,-1,RC,DT_CENTER + DT_VCENTER + DT_SINGLELINE
结束小组
“在用户控件显示事件中绘制按钮
私人小组UserControl_Show()
呼叫平局
结束小组
“响应按钮点击事件
“实现UserControl_MouseDown事件
事件ButtonClick()
私人小组UserControl_MouseDown(按钮为整数,Shift键整数,X为单,Y单)
如果按钮= 0,则
的RaiseEvent ButtonClick
万一
结束小组