[分享]天天控件学习帖

yigepure 2006-04-24 12:42:21
控件在应用程序中使用频率非常高,它非常有魅力,哪怕只是一个小小的属性或是事件都能创造出自己的东西。(我以EXCEL为载体)
下面就以一个例子为说明吧。
控件的突显及隐现
1、首先在EXCEL的VBE中插入一个用户窗体。在上面添加一个标签控件和命令按钮
控件\属性 Name Caption backcolor visible
UserForm FrmSorH 按钮突显隐藏范例
Label lblExd "" red
commandbutton cmdShow 显示 False

2、特点
启用窗体时,不显示命令按钮,当鼠标移到命令按钮的位置时,命令按钮显现,当鼠标移到标签控件时,控件会突出显示。

3、程序代码清单
Option Explicit

Private Sub CmdShow_Click()
MsgBox "这是一个按钮突显隐藏的范例。" & vbCrLf & vbCrLf & _
"仅仅是利用了MouseMove事件!", vbOKOnly + vbInformation, "Hello"
End Sub

Private Sub LblExd_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
LblExd.SpecialEffect = fmSpecialEffectRaised
FrmSorH.Caption = "突显标签控件"
End Sub

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)

Dim strFrmCaption As String
LblExd.SpecialEffect = fmSpecialEffectFlat

LblExd.Caption = "FMouseX: " & X & " FMouseY: " & Y & vbCrLf & _
"LblW: " & LblExd.Width & " LblH: " & LblExd.Height & vbCrLf & _
"LblL: " & LblExd.Left & " LblT: " & LblExd.Top & vbCrLf & _
"FormW: " & FrmSorH.Width & " FormH: " & FrmSorH.Height & vbCrLf & _
"CmdW: " & CmdShow.Width & " CmdH: " & CmdShow.Height & vbCrLf & _
"CmdL: " & CmdShow.Left & " CmdT: " & CmdShow.Top

If (X >= CmdShow.Left) And (X <= CmdShow.Left + CmdShow.Width) And _
(Y >= CmdShow.Top) And (Y <= CmdShow.Top + CmdShow.Height) Then
'利用X,Y坐标来判断鼠标当前的位置是否位于命令按钮内
FrmSorH.Caption = "命令按钮显现"
CmdShow.Visible = True
Else
CmdShow.Visible = False

If X < CmdShow.Left Then
strFrmCaption = "MouseX还差Cmd左边" & CmdShow.Left - X
Else
If X > CmdShow.Left + CmdShow.Width Then
strFrmCaption = "MouseX超过Cmd宽度" & _
X - CmdShow.Left - CmdShow.Width
Else
strFrmCaption = "MouseX在Cmd宽度范围内"
End If
End If

If Y < CmdShow.Top Then
strFrmCaption = strFrmCaption & " MouseY还差Cmd顶部" & CmdShow.Top - Y
Else
If Y > CmdShow.Top + CmdShow.Height Then
strFrmCaption = strFrmCaption & " MouseY超过Cmd高度" & _
Y - CmdShow.Top - CmdShow.Height
Else
strFrmCaption = strFrmCaption & " MouseY在Cmd高度范围内"
End If
End If
FrmSorH.Caption = strFrmCaption

End If

End Sub

具体附件可在:http://yigepure.blog.excelhome.net/user1/yigepure/archives/2006/391.html
下载它的附件例子。
...全文
953 20 点赞 打赏 收藏 举报
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lixingyuaaa 2006-10-30
支持,一定要支持
  • 打赏
  • 举报
回复
dashi 2006-09-25
支持yigepure! 相关问题,有空可以联系。
  • 打赏
  • 举报
回复
yigepure 2006-05-10
动态控件生成简易计算器
http://yigepure.blog.excelhome.net/user1/yigepure/archives/2006/451.html
SpecialEffect Property
http://yigepure.blog.excelhome.net/user1/yigepure/archives/2006/452.html
  • 打赏
  • 举报
回复
DawnPine 2006-05-09
精彩好铁!
收藏
  • 打赏
  • 举报
回复
yigepure 2006-05-03
MouseIcon,MousePointer,MouseDown,MouseUP,MouseMove演示范例
http://yigepure.blog.excelhome.net/user1/yigepure/archives/2006/442.html
  • 打赏
  • 举报
回复
yigepure 2006-05-03
十一、InsideHeight、InsideWidth 属性
InsideHeight 返回窗体中客户区的高度,以磅为单位。InsideWidth 返回窗体中客户区的宽度,以磅为单位。
语法: object.InsideHeight object.InsideWidth
说明:InsideHeight 和 InsideWidth 属性是只读的。如果该区含有滚动条,则返回的值不包括滚动条的高度和宽度
示例:将标签控件铺满窗体。在窗体上放置一个标签控件,一个命令按钮。属性设置如下:
控件\对象 Name属性
UserForm1 frmTiled
Label1 lblTiled
Commandbutton1 cmdLabelTiled

Private Sub cmdLabelTited_Click()
Dim Counter As Long

lblTiled.Caption = "窗体最大可用高度: " & frmTiled.InsideHeight & vbCrLf & _
"窗体最大可用宽度: " & frmTiled.InsideWidth
lblTiled.Height = frmTiled.InsideHeight
lblTiled.Width = frmTiled.InsideWidth
lblTiled.Top = 0
lblTiled.Left = 0

For Counter = 1 To 100000
DoEvents
Next Counter

lblTiled.Height = 20
lblTiled.Width = 120
lblTiled.Left = (frmTiled.InsideWidth - 120) / 2
lblTiled.Top = (frmTiled.InsideHeight - 20) / 2

End Sub
  • 打赏
  • 举报
回复
yigepure 2006-05-03
十、Cycle 属性
指定当用户离开某框架或 Page 的最后一个控件时所应采取的操作。
语法:object.Cycle [= fmCycle]

Cycle 属性的语法有以下几个成分:
成分 说明
object 必需。一个有效对象。
fmCycle 可选。指定该循环是否包括嵌套在框架或多页控件中的对象。

fmCycle 的设置值为:
常量 值 说明
fmCycleAllForms 0 在窗体的控件以及当前显示在窗体中的框架和多页控件的控件上进行的循环
fmCycleCurrentForm 2 在窗体、框架或多页控件中的控件上进行的循环。只要没有将焦点设定到窗体、框架或多页控件以外的控件中,它将一直停留在窗体、框架或多页控件内

如果给 Cycle 指定了一个非整数值,该值将被四舍五入为最接近此数的一个整数。
说明:当用户在一个窗体或子窗体内跳格时,Tab 键顺序指定控件接收焦点的顺序。当用户从 Tab 键顺序内的最后一个控件上跳走时,Cycle 属性决定了将要采取的操作。
当用户从 Tab 键顺序内的最后一个控件上跳走时,fmCycleAllForms 设置将焦点传输至该窗体中的下一个框架或多页控件的第一个控件。
当用户从 Tab 键顺序内的最后一个控件上跳走时,fmCycleCurrentForm 设置将焦点传送至同一个窗体、框架或多页控件的第一个控件。

示例:演示Cycle属性,在窗体上放二个框架控件,二个命令按钮,框架多放置些文本框。
控件\对象 Name属性
Commandbutton1 cmdMoveAll
Commandbutton2 cmdMoveCurrent
代码如下:
Private Sub cmdMoveAll_Click()
Frame1.Cycle = fmCycleAllForms
Frame2.Cycle = fmCycleAllForms
End Sub

Private Sub cmdMoveCurrent_Click()
Frame1.Cycle = fmCycleCurrentForm
Frame2.Cycle = fmCycleCurrentForm
End Sub

Private Sub UserForm_Initialize()
Frame1.Cycle = fmCycleAllForms
Frame2.Cycle = fmCycleAllForms
End Sub
  • 打赏
  • 举报
回复
yigepure 2006-05-03
另还有几个如如何在集合里循环等例子。详见下面的链接

http://yigepure.blog.excelhome.net/user1/yigepure/cmd.html?do=blogs&id=72&uid=22
  • 打赏
  • 举报
回复
yigepure 2006-05-03
九、Controls集合
Controls 集合汇集了某个对象所包含的全部控件。
说明: 对象的 Controls 集合中的每个控件都具有唯一的索引,索引值可以是整数或字符串。集合中的第一个控件的索引值是 0;第二个控件的索引是 1;依此类推。该索引表示了控件加入集合的顺序。
如果索引为字符串,则它代表控件的名称。控件的 Name 属性也表示该控件的名称。
可用 Controls 集合对控件进行枚举或计数,并设置它们的属性。例如,可以对某个窗体的 Controls 集合进行枚举,并将每个控件的 Height 属性都设置为指定值。
注意 在对集合进行枚举时可以使用 For Each...Next 语句。

它具有Count 属性,Add 方法,Clear方法,ReMove方法,Item方法,Move方法。

用一个简单的例子来说吧。
在窗体上添加一个框架控件和四个命令按钮。属性设置如下:
控件\对象 Name属性
Frame1 frmAddBox
Commandbutton1 cmdAddObject
Commandbutton2 cmdClearObject
Commandbutton3 cmdRemoveObject
Commandbutton4 cmdMoveObject

代码如下:
Private Sub cmdAddObject_Click()
Dim DymanicTextBox As Control
Set DymanicTextBox = fraAddBox.Controls.Add("Forms.TextBox.1", "MyTextbox", True)
Set DymanicTextBox = Nothing
End Sub

Private Sub cmdClearObject_Click()
fraAddBox.Controls.Clear
End Sub

Private Sub CmdRemoveObject_Click()
If fraAddBox.Controls.Count > 0 Then fraAddBox.Controls.Remove "MyTextBox"
End Sub

Private Sub cmdMoveObject_Click()

If fraAddBox.Controls.Count > 0 Then
m_TxtBoxTop = (m_TxtBoxTop + 5) Mod 100
fraAddBox.Controls("MyTextBox").Move 0, m_TxtBoxTop
End If

End Sub
  • 打赏
  • 举报
回复
yigepure 2006-04-29
[原创]我也玩特效窗体+不用工具修改工作薄的工程不可看
http://yigepure.blog.excelhome.net/user1/yigepure/archives/2006/431.html
  • 打赏
  • 举报
回复
yigepure 2006-04-28
事件里有,系统提供的
  • 打赏
  • 举报
回复
casting 2006-04-27
进来学习:
请教楼主:第一个帖子里的:Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 这些参数是哪里来的?
谢谢
  • 打赏
  • 举报
回复
yigepure 2006-04-26
六、CanPaste 属性
指定在剪贴板中是否包含对象支持的数据。(只读)
语法 object.CanPaste
object 必需。一个有效对象。

CanPaste 属性的返回值为:
值 说明
True 鼠标指针下的当前对象可接受从剪贴板中粘贴的信息(默认值)。
False 鼠标指针下的当前对象不能接受从剪贴板中粘贴的信息。

说明
如果剪贴板中的数据采用的是当前目标对象所不支持的格式,则 CanPaste 属性为 False。例如,如果试图将位图粘贴到某个只支持文本的对象中,则 CanPaste 将为 False。

七、CanRedo 属性
表示最近的撤消操作可否反向执行。(只读)
语法 object.CanRedo
object 必需。一个有效对象。

CanRedo 属性的返回值:
值 说明
True 最近的撤消操作可反向执行。
False 最近的撤消操作不可反向执行。

说明
执行一次“重复”操作即意味着反向执行一次“撤消”操作,但这不一定代表重复执行用户的上一次操作。
下面的用户操作可以解释“撤消”和“重复”操作:
更改一个选项按钮的设置;在一文本框内输入文本;
单击“撤消”按钮,则文本框中的文本内容消失;
单击“撤消”按钮,则选项按钮的设置恢复为原先的设置;
单击“重复”按钮,则选项按钮的设置值更改;
单击“重复”按钮,则重新显示文本框中的文本内容。

八、CanUndo 属性
表示用户的上一次操作是否可撤消。(只读)
语法 object.CanUndo
object 必需。一个有效对象。

CanUndo 属性的返回值为:
值 说明
True 用户的最近一次操作可以撤消。
False 用户的最近一次操作不可以撤消。

说明
用户的许多操作均可通过“撤消”命令撤消。而 CanUndo 属性则表示最近一次操作是否可以撤消。

小提示:其实仔细观察CanUndo、CanRedo属性与Excel上的撤消\重复键类似。它们分别
对应UndoAction、RedoAction方法。

示例:下面程序中使用CanRedo、CanUndo属性及对应方法撤消或重复对文本框的操作。使用了一个文本控件(textbox)和两个命令按钮。
控件\对象 Name属性
UserForm1 frmChangeText
Textbox1 txtChange
Commandbutton1 cmdUndo
Commandbutton2 cmdRedo

程序代码:
'==========================================='
'| 创建人:胡炜 创建时间:2006-4-26 17:32 |'
'| 功用:演示Redo\Undo属性 |'
'| 效果:撤消或重复对文本框内的操作 |'
'| 说明:RedoAction方法分别对应CanRedo属性 |'
'| UndoAction方法分别对应CanUndo属性 |'
'| 使用这两个属性及对应方法的效果类似于 |'
'| "编辑"菜单项下的"撤消"和"重复"功能 |'
'| 无法做到真正意义上的,首先功能按键的可用与 |'
'| 不可用这个效果就没有做到.目前我没有方法 |'
'============================================='


Private Sub cmdRedo_Click()

If frmChangeText.CanRedo Then
frmChangeText.RedoAction
Else
MsgBox "不能进行重复操作", vbOKOnly + vbCritical, "操作错误"
End If

End Sub

Private Sub cmdUndo_Click()

If frmChangeText.CanUndo Then
frmChangeText.UndoAction
Else
MsgBox "不能进行撤消操作", vbOKOnly + vbCritical, "操作错误"
End If

End Sub

===============================================================
所上所有例子及原文可以在下面的地址里查看
http://blog.excelhome.net/user1/yigepure/cmd.html?do=blogs&id=72&uid=22
  • 打赏
  • 举报
回复
yigepure 2006-04-26
四、BorderStyle属性
指定控件或窗体的边框类型。
语法 object.BorderStyle [= fmBorderStyle]

BorderStyle 属性的语法包含以下几个成分:
成分 说明
object 必需。一个有效对象。
fmBorderStyle 可选。指定边框类型。

fmBorderStyle 的设置值如下:
常量 值 说明
fmBorderStyleNone 0 控件无可见的边框线。
fmBorderStyleSingle 1 控件有一单线的边框(默认值)。

说明
只可选用 BorderStyle 或 SpecialEffect 属性中的一种来指定某一控件的边框,而不能同时采用这两种属性。当其中一种属性被设为一非零的值时,则另一属性自动被设为零。例如:若将 BorderStyle 设为 fmBorderStyleSingle,则系统将 SpecialEffect 设为 0 (Flat);如果将 SpecialEffect 设为一非零的值,则系统将 BorderStyle 设为 0。
BorderStyle 用 BorderColor 来定义其边框的颜色。

五、BorderColor属性
指定对象的边框颜色。
语法 object.BorderColor [= color]
BorderColor 属性的语法有以下几个成分:
成分 说明
object 必需。一个有效对象。
color 可选。值或常量,指定对象的边框颜色。
可采用任意整数来代表某一种有效的颜色,也可采用由红、绿、蓝三种成分构成的 RGB 函数来指定一种颜色,每一种色素的数值为 0 至 255 之间的任意整数。(同BackColor的Color的设置规则)
说明
若要使用 BorderColor 属性,则必须将 BorderStyle 属性设置为除 fmBorderStyleNone 以外的数值。
BorderStyle 使用 BorderColor 来设定边框颜色。
  • 打赏
  • 举报
回复
yigepure 2006-04-26
三、BackColor属性
返回或设置对象的背景色。(可读写)
语法 object.BackColor [= Color]
BackColor 属性的语法有以下几个成分:
成分 说明
object 必需。一个有效对象。
Color 可选。值或常量,指定对象的背景色。 VB在运行使用Microsoft windows 的红、绿、蓝(RGB)颜色方案。其设置值如下:
设置值 说明
标准RGB颜色 使用调色板或在代码中使用RGB函数指定的颜色
系统缺省颜色 使用由对象浏览器中的VB对象库所列的系统颜色

常数 指定的颜色,使用用户在控制面板中选择的颜色。
在设计时,BackColor设置为由常数vbWindowBackground定义的系统缺省颜色。
说明
只有在 BackStyle 属性设为 fmBackStyleOpaque 时,才可看到对象的背景色。
可采用任意整数来表示某一种有效的颜色,也可采用由红、绿、蓝三种成分构成的 RGB 函数来指定某种颜色,每一种色素的值是 0 至 255 之间的任意整数,如果超过255,则作为255处理。例如:值为 4966415 的整数或红、绿、蓝色素值为 15、200、75 的 RGB 函数,均代表青色。
下表列出常见的标准颜色,以及这些颜色的红、绿、蓝原色的成份:
颜色 红色值 绿色值 蓝色值
黑色 0 0 0
蓝色 0 0 255
绿色 0 255 0
青色 0 255 255
红色 255 0 0
洋红色 255 0 255
黄色 255 255 0
白色 255 255 255

示例:下面程序中点击窗体即换背景色。
对象 Name属性
UserForm1 frmBCol

程序清单

Option Explicit

'===================================================='
'| 创建人:胡炜 创建时间:2006-4-26 14:32 |'
'| 功用:演示BackColor属性 |'
'| 效果:点击窗体即改变窗体的背景色 |'
'| 说明:Randomize是初始化随机数生成器 |'
'| RGB函数 |'
'| 返回一个 Long整数,用来表示一个 RGB 颜色值 |'
'| 语法 RGB(red, green, blue) |'
'| red,green,blue 必要参数 |'
'| Variant(integer) 数值范围从0~255. |'
'===================================================='

Private Sub UserForm_Click()

Dim intRed As Integer
Dim intGreen As Integer
Dim intBlue As Integer

Randomize '初始Rnd函数的种子值

intRed = Int(Rnd * 256)
intGreen = Int(Rnd * 256)
intBlue = Int(Rnd * 256)

frmBCol.BackColor = RGB(intRed, intGreen, intBlue)

End Sub
  • 打赏
  • 举报
回复
yigepure 2006-04-26
二、ActiveControl 属性
标识并允许操作具有焦点的控件。
语法 object.ActiveControl
object 必需。一个有效对象。
说明
ActiveControl 属性是只读的,当界面上的控件被选中时,该属性即被设置。在设置属性或调用方法时,可以用 ActiveControl 来替代控件名。因为也可以认为它同时还是一个对象,它具有的属性有 同时它还具有方法
示例:下面示例在一个子程序中使用 ActiveControl 属性,该子程序跟踪用户访问的控件。在窗体中放置一个文本控件(Textbox),两个命令按钮(Commandbutton)。
控件\对象 Name属性
UserForm1 frmShowObjName
Textbox1 txtShowName
Commandbutton1 cmdShowName1
Commandbutton2 cmdShowName2
程序清单
Option Explicit

'==============================================='
'| 创建人:胡炜 创建时间:2006-4-26 14:32 |'
'| 功用:演示ActiveControl属性 |'
'| 说明:ShowobjName是模块级代码块,方便其它的 |'
'| 事件或代码块调用. |'
'==============================================='

Private Sub cmdShowName1_Enter()
Call ShowObjName
End Sub

Private Sub cmdShowName2_Enter()
Call ShowObjName
End Sub

Private Sub txtShowName_Enter()
Call ShowObjName
End Sub

Private Sub ShowObjName()
frmShowobjName.Caption = frmShowobjName.ActiveControl.Name
End Sub

说明:Enter 事件与 Visual Basic 中的 GotFocus 事件类似。
  • 打赏
  • 举报
回复
yigepure 2006-04-26
第二节 UserForm对象
2.1 属性
下面我们就窗体对象的属性做一个介绍。(以字母序)
一、Name 属性(名称)
功能:返回在代码中用于标识窗体、控件或数据访问对象的名字。在运行中为只读。
语法object.Name [= String]
小提示,当Name属性应用于Font对象时,它指定Font对象的相关字体的名称。(可读写)
Name 属性的语法包括下列成分:
成分 说明
object 必需。一个有效对象。
String 可选。要给字体或控件指定的名称。

设置
EXCEL中的说明为给 Name 指定字符串的准则(例如名字的最大长度)随应用程序的不同而不同。 VB6中的说明为对象的Name属性必须比字母开头,不能超过40个字符。可以包含下划线及数字,不能包含标点符号或空格。(这里与变量的命名方式差不多)。在VB中可以通过设置Name属性来创建控件数组,但是EXCEL不行,所以不做介绍。
说明
对于对象,Name 的默认值由对象的类名后跟一个整数组成。例如,放置在窗体上的第一个文本框的默认名是 TextBox1,第二个文本框的默认名是 TextBox2。
在设计时间添加到窗体中的每个控件都必须有唯一的名称。不能与其它的公共对象有相同的名字。Name属性最好不要用关键字,属性名字或其它对象的名字。
Name属性在缺省的情况下与Caption、Text、Linktopic属性的缺省值相同,但它们无必然联系。
补充
Name属性作为一个对象的标识,它的名字我觉得非常关键,为什么这么说呢?
我们试想一下,如果一个窗体上有几个命令按钮,都是使用缺省的Name属性,Commandbutton1、Commandbutton2…3….等,各自的功能不同,在编程时,虽然可以使用注释时,标记,但并不明了,在属性列表中快速选中对象时,在对代码的维护时,都存在不小的麻烦。也许说不定这个维护者有可能还是自己,对于一个在几个月前写的东西,我想并不是每一个还能记得自己当时的想法及各个控件的功用。所以给对象的Name属性安一个有意义的名字是非常有必要的。如退出的命令按钮的Name属性可以使用CmdExit。我们就很容易通过它的Name属性名来了解它的功用及它的代码块。
关于命名,我说几句,我在论坛上发现不少作品中有使用中文字来作为过程名或对象名,这样虽然更直观,但是并不少所有的版本都支持它,作为一名有良好习惯的编程人员,应该使用英文。有必要的可以使用注释等来进行标注。
同时我建议大家使用编码标准约定。
  • 打赏
  • 举报
回复
yigepure 2006-04-26
第一讲 控件入门
第一节 控件初接触
看了昨天的小程序我相信大家对窗体里的控件都有一个大概的了解了吧。下面我们就来介绍一下它。
1、首先在EXCEL的VBE中插入一个用户窗体。
(这就是空白窗体,可以在上面放置各种控件)
窗体也是一个控件,它可以作为容器,同样Picturebox控件、Frame控件等控件也可以作为其它控件的容器。

小提示:有的控件只能在设计时可见,在运行中不可见,如DiaolgBox控件。

既然它也是一个控件,那么它肯定具有属性,方法,事件。选中窗体,再点击常用工具栏的“属性窗口”命令,这时你会发现有一个属性窗口显示。
这里显示的就是窗体控件(Userform1)的属性列表。随着以后我们的控件的增加,所有的控件都会出现在 列表里,可以通过下拉单选择控件,快速查看该控件的属性。它有两个查看选项,一个是按字母序(升序排列),别一个是按分类序(按用途分类,用途首字母升序排列)。

那么属性是什么?属性窗口有什么用呢?
属性:就是该对象的外在特点。打个比方吧,如一个苹果,它是红的,大的,甜的。等等,刚才举的这些就是它的属性。
那么属性窗口我们可以通过它来快速查看和修改某对象的属性,正如不是所有的苹果都是红的,也有黄的,绿的,等等。
属性窗口中列出来的所有属性都可以在通过这个窗口进行修改(但不能在运行时),有的属性只能在设计时修改,如:name属性,有的只能在运行中使用,如:currentX,currentY等。有的只能在运行中创建和修改,如TreeView控件中的node对象及属性。
有些属性既是属性又是对象,如Font属性。
  • 打赏
  • 举报
回复
蓝帆·雨轩 2006-04-25
支持yigepure!

相关问题,有空可以联系。
  • 打赏
  • 举报
回复
tangchao5220 2006-04-24
ding
  • 打赏
  • 举报
回复
相关推荐
发帖
Microsoft Office应用
加入

6159

社区成员

Microsoft Office应用
申请成为版主
帖子事件
创建了帖子
2006-04-24 12:42
社区公告
暂无公告