1、6.1 控件概述,6.3 框架,6.2 单选按钮和复选框,6.5 滚动条与滑块,6.6 计时器,第6章 常用控件,6.6 鼠标器和键盘,6.4 列表框和组合框,结束,6.1控件概述,1.标准控件标准控件是由Visua1 Basic本身提供的。例如,文本框、命令按钮和框架等都是标准控件(或称内部控件)。2.ActiveX控件ActiveX控件是扩展名为.ocx的独立文件,其中包括Visua1 Basic各种版本都提供的控件(如DataCombo和DataList等)ActiveX控件必须添加到工具箱中才能使用。,3.可插入的对象可插入的对象通常都是OLE对象。由其它应用程序创建的不同格式的数据,
2、如Microsoft Excel工作表对象和Microsoft Project日历对象等都是可插入对象。这些对象可以被添加到工具箱中并在窗体中使用。使用可插入对象,就可以在Visua1 Basic中编程控制其它应用程序的对象。,6.2 单选按钮和复选框,1.单选按钮和复选框的重要属性,2.单选按钮和复选框的主要事件,6.2.1 单选按钮和复选框的重要属性,(1)Alignment属性0 (缺省值)文本是左对齐的,控件是右对齐的。1 文本右对齐,控件左对齐。 (2)Value属性 单选按钮: Value=True,表示单选按钮被选中;Value=False默认设置, 表示单选按钮不被选中。 复选
3、框: Value=0,默认设置,表示复选框不被选中;Value=1,复选框被选中;Value=2,复选框为灰色,表示禁止用户选择。 (3)Style属性 Style=0,标准方式;Style=1,图形方式(参见图6-5)。,图6-2-1 复选框(左)和单选按钮(右),(a)复选框和单选按钮(未选中状态) (b)复选框和单选按钮(选中状态)图6-2-2 图形方式的单选按钮和复选框,6.2.2单选按钮和复选框的主要事件,单选按钮和复选框可以接受的事件主要有click事件。但往往并不需要编写其事件过程。因为单击时,它们自动改变状态。,例6-2:用复选框和单选按钮控制文本框中输入的字体。 (1)界面设
4、计 本程序采用如图6-6所示界面。包括两个标准形式的单选按钮,两个图形方式的复选框,一个文本框(设计时已经输入文字,字体三号),一个Picture图片框,用于显示文本框中文本的字体),一个Command命令按钮用于切换字体。各控件的属性见表6-2。,图6-2-3 复选框和单选按钮的应用,表6-2 控件属性,Private Sub Check1_Click()Text1.FontBold = IIf(Check1=1,True,False) “粗体”复选框是否按下(选中) End SubPrivate Sub Check2_Click()Text1.FontItalic = IIf(Check2
5、=1,True,False) “斜体”复选框是否按下(选中) End Sub Private Sub Option1_Click()Text1.FontUnderline = IIf(Option1,True,False) “下划线”单选按钮是否选中 End Sub Private Sub Option2_Click()Text1.FontStrikethru = IIf(Option2,True,False) “删除线”单选按钮是否选中 End Sub Private Sub Command1_Click()Static I 声明变量Dim OldFontPicture1.ClsOldFon
6、t = FontName 保留原来的字体。Text1.FontName = Screen.Fonts(I) 改变到新的字体。I = I + 1 计数器增一。If I = FontCount Then I = 0 重新开始。FontName = OldFont 恢复原来的字体。Text1.FontBold = IIf(Check1=1,True,False) “粗体”复选框是否按下(选中)Text1.FontItalic = IIf(Check2=1,True,False) “斜体”复选框是否按下(选中)Text1.FontStrikethru = IIf(Option1,True,False)
7、 “下划线”单选按钮是否选中Text1.FontStrikethru = IIf(Option2,True,False) “删除线”单选按钮是否选中Picture1.Print Text1.FontName End Sub,6.3 框架,框架(Frame)控件可以用来对其他控件进行分组,以便于用户识别。 为了将控件分组,首先需要绘制框架,然后绘制框架里面的控件。 如果需要对窗体上已有的控件进行分组,可以选中需要放入框架中的控件,然后采用“编辑”菜单的“剪切”命令将控件剪切到剪贴板中,再选中框架,单击“编辑”菜单的“粘贴”命令将选中的控件放入框架中。如果要将框架内的控件移动到框架之外,也只能采用
8、“剪切”和“粘贴”的方法。 框架的主要属性有Name、Caption 、Enable、Visible等。 Caption为框架的可见文字部分,如果省略,则框架形式上如同一个封闭的矩形框。 当框架的Enable属性为False时,框架内的所有控件都将屏蔽,用户无法对其操作,此时框架的标题(Caption)为灰色。 当框架的Visible属性为False时,框架及其内部的所有控件都将隐藏起来。,6.4 列表框和组合框,列表框(ListBox) 控件显示项目列表,用户从其中可以选择一项或多项。列表框的默认名为ListX,组合框的默认名为ComboX(X=1,2,。)。列标框和组合框的图标参见图6-7
9、。组合框(ComboBox) 控件将文本框(TextBox) 控件和列表框控件的特性结合在一起既可以在控件的文本框部分输入信息,也可以在控件的列表框部分选择一项。组合框有三种风格:下拉式组合框、简单组合框和下拉式列表框。,用户可以通过单击列表框或组合框中的某一项来选择所需选项,也可以在组合框中输入自己的选项(即使输入的内容并不包含在列表中),但是只能在列表框中进行选择,这是列表框和组合框的最大区别。,6-4-1 列表框组合框图标,1. 列表框和组合框的重要属性,(1)List属性,List属性用来存放列表框和组合框列表部分的选项。列表是一个字符串数组,数组的每一项都是一列表选项,对列表框和组合
10、框控件在设计时可以通过属性窗口进行设置,也可以在运行时进行读写。其语法为:,.List () =,(2)ListIndex属性,ListIndex属性用来存放控件中当前选择项目的索引,在设计时不可用。如果未选定项目,则 ListIndex 属性值是 1。对于 ComboBox 控件,表示用户向文本框部分输入了新文本。,(3)Sorted属性,Sorted属性决定控件的元素是否自动按字母表顺序升序排序。Sorted属性值为True,则选项按字母顺序升序排列,否则按输入的顺序排列。,(4)Text属性,对下拉组合框和简单组合框控件,表示编辑域中的文本,该文本可以从列表中选择或从键盘输入。,对下拉列
11、表框和列表框控件,表示在列表中选择的选项,返回值总与表达式List(ListIndex)的返回值相同。Text属性只能在程序中设置,为只读属性。,2. 列表框特有的重要属性,(1)MultiSelect属性,MultiSelect属性用来设置在列表框控件中进行复选以及如何进行复选。在运行时是只读的。,MultiSelect 属性值在0、1、2之间选择。,MultiSelect 属性值=0:(缺省值)不允许复选。,MultiSelect 属性值=1:简单复选。鼠标单击或按下空格键,在列表中选中或取消选中项。使用箭头键移动焦点。,MultiSelect 属性值=2:扩展复选。按下 SHIFT 并单
12、击鼠标或按下 SHIFT 以及一个箭头键(上箭头、下箭头、左箭头、右箭头)将在以前选中项的基础上扩展选择到当前选中项。按下 CTRL 并单击鼠标在列表中选中或取消选中项。,(3)SelCount 属性,SelCount 属性返回在列表框控件中被选中项的数量。,如果没有选项被选中,那么 SelCount 属性将返回 0 值。,(4)Style属性,Style属性控制列表框的外观。,Style属性值=0:默认值,不带复选框,单击选项即可选中。,Style属性值=1:带复选框,必须在选项左边的复选框(小方框)中出现小对钩时才可选中。,列表框名.Selected() = ,Selected属性值为一个
13、逻辑数组,其中的每个元素对应列表中的一项,表示列表框控件中的一个项的选择状态。当数组元素值为True时,对应项被选中,否则没有选中。在设计时不可用。Selected属性的语法为:,(2)Selected属性,3. 组合框特有的重要属性,对于组合框控件, Style 属性值可以为0,1和2。 Style 属性值=0:缺省值,此时组合框称为下拉式组合框。包括一个下拉式列表和一个文本框。只有在单击文本框右边的下拉按钮时才可见下拉式列表框。可以从列表选择或在文本框中输入。 Style 属性值=1:此时组合框称为简单组合框。包括一个文本框(文本框的右边无下拉按钮)和一个不能下拉的列表框。可以从列表中选择
14、或在文本框中输入用户的选择(可以是列表中没有的内容)。 Style 属性值=2:此时组合框称为下拉式列表框。这种样式仅允许从下拉式列表中选择。,4.列表框和组合框的常用方法,(1)AddItem方法,AddItem方法用于将项目添加到列表框或组合框控件,其语法为:,.AddItem ,,(2)Clear方法,Clear方法用于清除列表框或组合框或系统剪贴板的内容。其语法为:,.Clear,(3)RemoveItem方法,RemoveItem 方法用以从列表框或组合框中删除一项。其语法为:,.RemoveItem ,5. 列表框和组合框的常用事件,列表框和组合框的常用事件有Click事件、Dbl
15、Click事件、Dropdown事件等。其中只有简单组合框(Style=1)才能响应Dbllick事件。另外,下拉式组合框和简单组合框具有Change事件(在输入文本时响应事件)。在大多数情况下,都是在用户选择项目后,读取列表框或组合框的Text属性。,例6-4-1:建立两个列表框,分别为可购商品列表框和顾客购物列表框。要求程序能够完成商品选购、撤消选购、添加新商品、删除现有商品、统计全部选购的商品价格等操作。 (1)界面设计 如图6-4-2所示,在窗体上添加的2个框架、两个列表框、5个命令按钮。除列表框外其余控件的Caption属性见表6-4。,表6-4 控件属性,图6-4-2 运行界面,P
16、rivate Sub Command1_Click()If List1.ListIndex -1 Then List1_DblClick 选中某个选项后,调用List1_DblClick事件 End SubPrivate Sub Command2_Click()If List2.ListIndex -1 Then List2.RemoveItem List2.ListIndex 选中List2中某个选项后,将其删除 End SubPrivate Sub Command3_Click()newlist = InputBox(“输入新商品“) 从对话框中输入新商品名List1.AddItem ne
17、wlist 添加到List1中 End SubPrivate Sub Command4_Click()If List1.ListIndex -1 Then List1.RemoveItem List1.ListIndex 选中List1中某个选项后,将其删除 End SubPrivate Sub List1_DblClick() 双击List1时给List2列表框添加项目Dim k%, yandn%k = 0For i = 0 To List2.ListCount 1 If List2.List(i) = List1.Text Then k = 1 判断List2列表框中是否已有选定项目Nex
18、tIf k 1 ThenList2.AddItem List1.Text List2列表框中无选定项目则添加Elseyandn = MsgBox(“是:重复,否:不重复“, vbInformation + vbYesNo, “重复输入“)If yandn = 6 Then List2.AddItem List1.Text 同意重复选择时也可以添加End If End Sub,例6-4-2:将框架的应用实例进行改善,用列表框或组合框列出各电脑配件的选项供用户选择。用户每选择一项,将在“用户配置”组合框中添加对应的选择项,单击“求总价”按钮将在Picture1图片框中显示总价格。,(1)界面设计
19、设计如图6-4-3所示界面,有9个框架,“CPU”框架和“显示器”框架为列表框,其余为组合框。每个框架中有一个列表框或组合框,框架的Capion属性值、列表框或组合框的名称相同,分别为各类配件的名称。列表框和组合框的种类见图示。(设计时组合框的Text属性为相应组合框的名称),图6-4-3 列表框和组合框的应用,(2)编写事件过程代码 Dim cpupri, dypri, hdpri, mbpri, grapri, mempri, cdpri, othpri, realpri As Single Dim mycpu!, mydy!, myhd!, mygra!, mymb!, mymem!,
20、mycd!, myoth!Private Sub Form_Load()cpupri = Array(1000, 1100, 1200, 1300, 1400) cpupri 为存放CPU价格的数组 同样用Array函数为其他存放各配件价格的数组dypri、hdpri、mbpri 、grapri 、mempri、cdpri 赋值 End SubPrivate Sub Command1_Click()用户配置.AddItem cpu.Text, 0:用户配置.AddItem 光驱.Text用户配置.AddItem 内存.Text:用户配置.AddItem 其他.Text用户配置.AddItem
21、显卡.Text:用户配置.AddItem 显示器.Text用户配置.AddItem 硬盘.Text:用户配置.AddItem 主板.Textrealpri = mycpu + mydy + myhd + mygra + mymb + mymem + mycd + myoth 求总价格Picture1.Print “总价=“; realpri End SubPrivate Sub cpu_Click()mycpu = cpupri(cpu.ListIndex) mycpu存放所选择的CPU价格 End Sub,6.5 滚动条,滚动条(ScrollBar)控件通常用来帮助观察数据或确定位置,同时也
22、可以作为数据输入的工具。,6.5.1 滚动条的重要属性,1. Value属性Value属性表示滚动框在滚动条中的位置,用整数表示,其取值范围为-3276832767。 2. Max属性Max属性表示滚动条所能够代表的最大值,其取值范围为-3276832767。,3. Min属性Min属性表示滚动条或滑块所能够代表的最小值,其取值范围为-3276832767。 4. SmallChange 属性SmallChange属性表示当用户单击滚动条两端箭头时,滚动框移动的增量值。对滑块控件,可以用左、右箭头进行控制。 5. LargeChange属性 LargeChange属性表示当用户单击滚动条或滑块
23、中的空白处时,滚动框或滑快移动的增量值。对滑块控件,还可以用PageUp和PageDown键控制。,6.5.2 滚动条的事件,与滚动条有关的事件主要是Scroll和Change事件。只有拖动滚动框才响应Scroll,而通过单击滚动箭头或滚动条则不会发生Scroll事件。只要滚动框的位置发生改变,就触发Change事件。,6.6 计时器,计时器(Timer)控件是在应用程序中用来处理按一定时间间隔(Interval)触发事件的控件。在运行时不可见。 计时器的属性不多,其重要的属性为Interval属性。 计时器只有一个事件,即Timer事件。 在VB中,可以用Timer函数获取系统时钟的时间。而
24、Timer事件是VB模拟实时计时器的事件,不能将两者混淆。 Timer事件的一般语法格式为: Private Sub _Timer() 只要 Timer 控件的 Enabled 属性被设置为 True 而且 Interval 属性值大于 0,则 Timer 事件以 Interval 属性值指定的时间间隔发生。,例6-6-1:利用计时器实现气球升空。 在窗体上添加两个图片框控件Picture1Picture2,两个计时器Timer1、Timer2,令Interval1=10,Interval1=20,在Windows附件的“画图”程序中绘制几个气球,分别复制到两个图片框中。程序代码为: Priv
25、ate Sub Timer1_Timer()Picture1.Top = Picture1.Top 10 气球上升If Picture1.Top 0 ThenPicture1.Top = Form1.Height - Picture1.Height 气球1回到窗体下部End If End SubPrivate Sub Timer2_Timer()Picture2.Top = Picture2.Top 10 气球上升If Picture2.Top 0 ThenPicture2.Top = Form1.Height - Picture2.Height 气球2回到窗体下部End If End Sub
26、,例6-6-2:利用随机函数在文本框Text1中输入小学生加减运算题,答案由用户在文本框Text2中输入,每题解答时间为10秒钟,总共答题时间为60分钟。每题的限制时间采用倒计时,答题时间到,统计并显示总成绩。 (1)界面设计 设计如图6-15所示界面。除文本框外,其余各控件的属性见表6-5。,表6-6-1 控件属性,图6-6-1 运行界面,Dim n As Integer , k! k为存放当前剩余时间的变量Private Sub Command1_Click() “开始/下一题”按钮事件过程Dim a!, b! 存放操作数Static c! 存放正确答案Command1.Caption =
27、 “下一题“ 将“开始”变换为“下一题”If Val(Text2.Text) = c Then n = n + 10 答案正确,加10分Randomizea = CInt(100 * Rnd() + 1) : b = CInt(100 * Rnd() + 1) 随机产生操作数If a b ThenText1.Text = Str(a) & “-“ & Str(b): c = a b 减法运算ElseText1.Text = Str(a) & “+“ & Str(b) : c = a + b 加法运算End IfText2.Enabled = TrueText2.Text = “ : Text2
28、.SetFocus 清空Text2并将焦点定位在Text2上,以便输入答案k = 0Label2.Visible = True End SubPrivate Sub Command2_Click() “结束”按钮事件过程If Text1 “ And Text2.Text “ ThenCommand1_Click 防止漏判Command1.Visible = False : Command2.Visible = False : Command3.Visible = FalseTimer1.Enabled = False 停止计时 Label3.Visible = FalseLabel2.Capt
29、ion = “你的得分是“ & n - 10 & “分“ 显示成绩 End Sub,Private Sub Command3_Click() “暂停/继续”事件过程If Command3.Caption = “暂停“ ThenTimer1.Enabled = False 暂停Command3.Caption = “继续“ElseTimer1.Enabled = True 继续Command3.Caption = “暂停“End If End SubPrivate Sub Timer1_Timer()Static m! 存放总用时m = m + 1 : k = k + 1Label3.Capti
30、on = “总共用时“ & Str(m)Label2.Caption = “当前剩余时间“ & Str(10 - k) 显示倒计时If k = 10 ThenLabel2.Caption = “时间到“ : Label2.Visible = FalseText2.Enabled = False 当前时间到,禁止解答k = 0 重新计时End IfIf m = 100 Then Command2_Click 总用时完,调用“结束”事件 End Sub,6.7.1 鼠标器,6.7 鼠标器和键盘,由用户操作鼠标所引起的、能够被VB各种对象识别的事件即为鼠标事件。常用的鼠标事件有单击(Click)、双
31、击(DblClick)、按下任意键(MouseDown)、释放任意键(MouseUp)、移动鼠标(MouseMove)等。,鼠标事件的语法结构基本相同,下面以窗体上发生的MouseMove为例进行说明。 Private Sub _MouseMove(index As Integer, button As Integer,shift As Integer,x As Single,y As Single),1.鼠标事件,2.鼠标光标形状,鼠标光标的形状由对象的MousePointer属性确定,具体值可在属性窗口了解或参考VB帮助文件。,例6-7-1:设计绘图程序。要求:单击鼠标左键开始绘制,按下左
32、键并移动鼠标进行绘制,释放鼠标则停止绘制,然后在新的位置开始绘制。用鼠标右键可以绘制较粗的线条。在窗体的左下角显示当前坐标值。,图6-7-1 鼠标事件实例,(1)界面设计,(2)编写事件过程代码。 Dim X0 As Integer ,Y0 As Integer X0、Y0存放新的图形的起点 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Dim k As Integerk = k + 1If k = 1 ThenX0 = X: Y0 = Y : Line (X0,
33、 Y0)-(X, Y) 设置绘图起点End If End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 Then Line -(X, Y) 按下鼠标左键时绘制图形If Button = 2 Then Circle (X, Y), 25: Circle (X, Y), 30: Circle (X, Y), 35: Circle (X, Y), 40 用绘制圆的方式绘制粗线条Label1.Caption = Str(X) : Lab
34、el2.Caption = Str(Y) End Sub Private Sub Form_Resize()Label1.Top = Form1.ScaleTop + Form1.ScaleHeight - Label1.Height 标签位于窗体底部Label2.Top = Form1.ScaleTop + Form1.ScaleHeight - Label2.Height End Sub,1. KeyPress 事件,当用户按下和松开一个 ANSI 键时发生KeyPress 事件。ANSI 键包括数字、大小字母、Enter、Backspace、Esc、Tab等键。方向键不会产生KeyPre
35、ss 事件。 KeyPress 事件过程的语法为: Private Sub Form_KeyPress(keyascii As Integer) Private Sub _KeyPress(index As Integer,keyascii As Integer),2. KeyDown 和 KeyUP 事件,当一个对象具有焦点时按下 ( KeyDown ) 或松开 ( KeyUp ) 一个键时发生KeyDown 和 KeyUP 事件。其语法为: Private Sub Form_KeyDown(keycode As Integer,shift As Integer) Private Sub _
36、KeyDown(index As Integer,keycode As Integer,,shift As Integer) Private Sub Form_KeyUp(keycode As Integer, shift As Integer) Private Sub _KeyUp(index As Integer,keycode As Integer, shift As Integer),6.7.2 键盘,例6-7-2:编写一个简易的指法练习程序。要求,最大时限1分钟。 (1)界面设计,(2)编写代码 Dim n As Integer, m As Integer n存放正确的击键数 ,m存
37、放总击键数 Private Sub Command1_Click()If Command1.Caption = “开始“ ThenTimer1.Enabled = True: Timer2.Enabled = True : Command1.Caption = “结束“ 开始练习ElseTimer1.Enabled = False :Timer2.Enabled = False 结束练习If m 0 Then Print “正确率为:“ m & “ 次“End If End Sub,图6-7-2指法测试程序界面,Private Sub Form_KeyPress(KeyAscii As Int
38、eger)m = m + 1 总击键数增1If Chr(KeyAscii) = Label1.Caption Then Label1.Caption = “: n = n + 1 击键正确,正确击键数增1If Chr(KeyAscii) = Label2.Caption Then Label2.Caption = “: n = n + 1 并清空标签If Chr(KeyAscii) = Label3.Caption Then Label3.Caption = “: n = n + 1 End Sub Private Sub Timer1_Timer()RandomizeIf Label1.Ca
39、ption = “ Then 击键正确后产生新字符并将标签移到窗体底部,随机产生小写的英文字母Label1.Top = Form1.Height - Label1.Height : Label1.Caption = Chr(CInt(Rnd * 26 + 97)ElseLabel1.Top = Label1.Top - 10End IfIf Label2.Caption = “ ThenLabel2.Top = Form1.Height - Label2.Height : Label2.Caption = Chr(CInt(Rnd * 26 + 97) ElseLabel2.Top = Lab
40、el2.Top - 10End IfIf Label3.Caption = “ ThenLabel3.Top = Form1.Height - Label3.Height : Label3.Caption = Chr(CInt(Rnd * 26 + 97)ElseLabel3.Top = Label3.Top - 10End IfIf Label1.Top = 0 Then Label1.Top = Form1.Height - Label1.Height 标签移动到窗体顶部后If Label2.Top = 0 Then Label2.Top = Form1.Height - Label2.H
41、eight 重新回到底部If Label3.Top = 0 Then Label3.Top = Form1.Height - Label3.Height End Sub Private Sub Timer2_Timer()Command1_Click 时限到,调用“结束”事件过程 End Sub,6.7.3 拖放,拖放(drag and drop)是一种将一个对象(称为源对象)拖到另一个对象(称为目标对象)上执行某种操作的功能。要拖动一个对象,可单击该对象,按住鼠标键,然后移到指定的新位置释放鼠标放下对象。,1. DragMode 属性,拖放的形式有两种,DragMode 属性为1时为自动拖放
42、,DragMode 属性为0时为手工拖放。,2. DragIcon属性 DragIcon属性用于改变拖动图标。拖动控件时,Visual Basic 将控件的灰色轮廓作为缺省的拖动图标。对 DragIcon 属性进行设置,就可用其它图象代替该轮廓。设置 DragIcon 属性的最简单方法就是使用属性窗口。,3. Drag方法采用手动拖放方式时,必须使用Drag方法来启动拖动操作。不过,在自动拖放方式下,也可以使用Drag方法。 Drag 方法的语法为: 对象名.Drag action,例6-7-3-1:将图片框控件拖放到准确的位置。 (1)界面设计 在新建工程的Form1窗体上添加一个图片框控件
43、Picture1,任意设置一个Picture属性值。将Picture1的DragMode设置为1。 (2)编写代码,(a)拖放前,(b)拖放到任意位置,图6-7-3 -1拖放图片,Dim X0 As Single ,Y0 As Single Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)Source.Move (X - X0), (Y - Y0) End Sub Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As
44、 Single, Y As Single)Label1.Drag 1 启动控件拖放X0 = X : Y0 = Y End Sub,4. DragDrop 事件和DragOver事件,在拖动对象经过某个对象时,该对象发生DragOver事件,拖动对象并在某个对象上释放鼠标按钮时,该对象发生DragDrop 事件。可用多种方法响应DragDrop 事件和DragOver事件。DragDrop 事件和DragOver事件的语法为 Private Sub _DragDrop(Source As Control,X As Single,Y As Single) Private Sub _DragOver
45、(Source As Control, X As Single, Y As Single, State As Integer),例6-7-3-2:下面的程序将控件拖动到Picture2图片框控件上时,判断拖动的控件类型,如果是图片框,则将其图片在Picture2上显示,并在窗体的标题内显示拖动控件的类型。当拖离Picture2时,清除Picture2中的图片,恢复窗体标题栏的名称(设计时窗体标题为“拖放”)。参见图6-27。 Private Sub Picture2_DragOver(Source As Control, X As Single, Y As Single, State As I
46、nteger)If TypeOf Source Is Picture Then Picture2.Picture = Source.PictureIf State = 1 ThenForm1.Caption = “拖放“ : Picture2.Picture = LoadPicture()ElseForm1.Caption = “这是“ & TypeName(Source) & “控件“End If End Sub,图6-7-3-2 拖放实例,5. Parent属性,控件作为参数Source传递给过程后,Source就继承了控件的的属性和方法,包括控件的Parent属性,即控件所在窗体,因而可
47、以对控件所在窗体进行各种操作。,如上面的程序中的语句: Form1.Caption = “拖放“ Form1.Caption = “这是“ & TypeName(Source) & “控件“ 可以改为: Source.Parent.Caption = “拖放“ Source.Parent.Caption = “这是“ & TypeName(Source) & “控件“,例6-7-3-3:跳棋游戏。如图6-7-3-3所示,红绿两种颜色的棋子(每种棋子数量相等,可以同时增减),要经过空格(白格)交换位置,当不同颜色的两个棋子相邻时,可以通过相邻的棋子跳到空格上,用最少步数完成交换者胜。编程实现行棋
48、过程。,Private Sub Label1_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single)If Label1(Index).BackColor = &HFFFFFF Then 控件为白色吗?If Abs(Source.Index - Index) = 2 And Label1(Index + Source.Index) / 2).BackColor Source.BackColor Then 被拖放的控件与发生DragDrop事件过程的控件相隔一个控件,且与相隔控件不同色 a = Label1(Index).BackColorLabel1(Index).BackColor = Source.BackColorSource.BackColor = a End If If Abs(Source.Index - Index) = 1 Then 被拖放的控件与发生DragDrop事件过程的控件相邻 a = Label1(Index).BackColor Label1(Index).BackColor = Source.BackColor Source.BackColor = a End If End If End Sub,