文档库 最新最全的文档下载
当前位置:文档库 › VB第十章

VB第十章

第10章 键盘与鼠标事件过程
前面己介绍过通用过程和一些常用的事件过程,本章将介绍与键盘和鼠标有关的事件过程。
10.1 键盘事件
在Windows环境下的应用程序,多数情况下用户只需简单地用鼠标操作,但有时还是需要用键盘操作。尤其是对于文本框控件,需要在其中输入内容时,往往要用到键盘事件。
VB中很多控件都识别键盘事件,有下列三种:
(1) KeyPress事件:在键盘上按下又放开一个键时触发KeyPress事件。
(2) KeyDown事件:按下触发KeyDown事件。
KeyUp事件:放开键盘上的任意一个键时引发KeyUp事件。
1、KeyPress事件
当压下键盘上的某个键时发生KeyPress事件。该事件可用于窗体、复选框、组合框、命令按钮、列表框、图片框、文本框、滚动条及与文本有关的控件。并不是按下键盘上的任意一个键都会触发KeyPress事件,KeyPress事件只对会产生ASCII码的按键有反应。包括字母键、数字键、标点符号键、Enter、Esc、Tab键等。如按下光标键等Keypress事件就无反应。所以Keypress事件过程最适合编写处理文字输入时的代码。
一般格式为:
Keypress事件过程格式
Sub 对象名_Keypress([Index As Integer]Keyascii As Integer) ‘控件对象的事件过程

End Sub
Sub Form_Keypress(Keyascii As Integer) ‘窗体的事件过程

End Sub

一般用于对输入的内容进行限制。例如,限制在文本框中只能输入0~9的数字,其事件过程为:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
Beep
KeyAscii = 0
Else
Print Text1
End If
End Sub
若限制在文本框中只能输入英文大写字母,其事件过程为:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc("A") Or KeyAscii > Asc("Z") Then
Beep
Keyascii = 0
Else
Print Text1
End If
End Sub

又如:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim s1 As String
If KeyAscii < 48 Or KeyAscii > 57 Then ‘只允许输入0-9的数字
s1 = KeyAscii
Beep
KeyAscii = 0
Picture1.Print "你按的不是数值键,而是字符" & Chr$(s1)
Exit Sub
End If
End Sub
该过程用来控制输入值只允许输入0-9(ASCII码48—57)的阿拉伯数字。如果输入其他字符,则响铃(Beep)、消除该字符并提示输入了什么字符。程序中的KeyAscii=0用来避免输入的字符在文本框中回显。
用KeyPress可以捕捉击键动作。例如,用下面的事件过程可以模拟打字机:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Picture1.Print Text1
End If
End Sub
在KeyPress过程中可以修改KeyAscii变量的值。例如:
Private Su

b Text1 KeyPress (KeyAscii As Integer)
If KeyAscii>=65 And KeyAscii<=122 Then
KeyAscii=42
End If
End Sub
上述过程对输入的字符进行判断,如果其ASCII码大于等于65(字母”A”,),并小于等于122(小写字母Z;),则用星号(ASCII码为42)代替。
注意:
在默认情况下,控件的键盘事件优先于窗体的键盘事件,因此在发生键盘事件时,总是先激活控件的键盘事件。例如在窗本上有一个文本框控件,如果希望窗体先接收键盘事件,则必须把窗体的Key Preview属性设置为True,否则按下某个键时窗体上不显示相应的字符。
例如在窗体上建立一个文本框,然后编写如下事件过程:
Private Sub Form_KeyPress(KeyAscii As Integer)
Print Chr(KeyAscii),
End Sub
KeyPreview属性默认值为False,当把窗体的KeyPreview属性设置为True时,按下某个键时相应的字符才在窗体上输出。
10.2 KeyDown和KeyUp事件
当控制焦点在某个对象上时,用户按下键盘上的任意一个键都会触发KeyDown事件,放开按键就会触发KeyUp事件。
KeyDown和Keyup事件过程格式:
Sub 对象名_KeyDown(KeyCode As Integer,Shift As Integer)

End Sub
Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) ‘窗体的事件过程

End Sub
Sub 对象名_KeyUp(KeyCode As Integer,Shift As Integer)

End Sub
Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) ‘窗体的事件过程

End Sub


KeyDown和KeyUp事件都有两个参数KeyCode和Shift
1 .KeyCode参数
该码以“键”为准,而不是以“字符”为准。也就是说,大写字母与小写字母使用同一个键,它们的KeyCode相同。注意,主键盘上的数字键与数字键盘上相同的数字键的KeyCode是不一样的。对于有上档字符和下档字符的键,其KeyCode为下档字符的ASCII码。
2、Shift参数:
该参数是一个整数。它指的是3个转换键Shift, Ctrl和Alt的状态,这3个键分别以二进制形式表示,按下Shift键时,Shift参数的值为001(十进制数1);按下Ctrl键时,Shift参数的值为010(十进制数2);而按下Alt键时,Shift参数的值为100(十进制数4)。如果同时按下两个或3个转换键,则Shift参数的值即为上述两者或三者之和。因此键盘能响应Shift、Ctrl和Alt键的各种组合。该Shift参数不用(为0)表示Shift、Ctrl和Alt键都没有按下。
b 2 b1 b0



b0为1时表示Shift键按下
b1为1时表示Ctrl键按下
b2为1时表示Alt键按下
与keyPress事件不同的是,KeyDown和Keyup事件返回的是被按下或放开键的扫描码和组合键的状态。也就是说它只区别于按下的键位,而不识别是什么符号。例如英文字符的大小写都在同一个键位上,对于keyPress事件过程输入大写字母与输入小写字

母是不同的,但KeyDown和Keyup事件过程视为相同。
编写一个程序,当按下键盘上的某个键时,输出该键的KeyCode码。
在实际应用中,KeyCode码有着重要的作用,利用它可以根据按下的键采取相应的操作。以下程序用来输出每个键的KeyCode码。
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Print Chr$(KeyCode); "--"; KeyCode
Print
End Sub
例10.3编写程序,演示KeyDown和KeyUp事件的功能。
首先在窗体内建立一个文本框,然后编写如下两个事件过程:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 112 Then
Print " F1键"
End If
If KeyCode = 113 Then
Print " F2键"
End If
If KeyCode = 120 Then
Print " F9键"
End If
End Sub
Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 112 Then
Print "松开功能键F1"
End If
If KeyCode = 113 Then
Print "松开功能键F2"
End If
If KeyCode = 120 Then
Print " 松开功能键F9键"
End If
End Sub
10.3鼠标事件
VB应用程序能够响应多种鼠标事件。例如窗体、图像控件都能检测鼠标指针的位置、按下的是左键还是右键,并且还能响应Shift、Ctrl和Alt键的各种组合。
对于鼠标的Click和DclClick事件我们已经十分熟悉了,以下再介绍另外三种鼠标事件:
MouseDown事件:当按下鼠标的任意一个键所触发的事件
MouseUp事件:当按下鼠标的任意一个键又放开所触发的事件
MouseMove事件:当鼠标移动时所触发事件
三个事件对应的事件过程:
Sub Form_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)

End Sub
Sub Form_MouseUp(Button As Integer,Shift As Integer,X As Single,Y As Single)

End Sub
Sub Form_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)

End Sub
参数说明
Button:该参数为一个整数,表示鼠标按下或放开时鼠标按钮的值。在二进制位中b0=1表示鼠标的左键被按下或放开;b1=1表示鼠标的右键被按下或放开。
Shift参数的意义与键盘事件的相同。
X,Y:是当前鼠标所在的位置,采用ScaleMode属性指定的位置。
例,设计一个简单的绘图程序。当鼠标的任意键按下并拖动时,MouseDown事件过程和MouseMove事件过程协同工作以启动画图。用MouseUp事件过程停止画图。
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dn = True
CurrentX = X
CurrentY = Y
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Dn Then
Line -(X, Y)
Circle (X, Y), 100
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dn = False
End Sub
教材例10.6用鼠标事件在窗体上画图。

写如下事件过程:
Dim PaintNow As Boolean
Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
PaintNow = True '允许画图
End Sub
Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
PaintNow = False '禁止画图
End Sub
Sub Form_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If PaintNow Then
PSet (X, Y) '画一个点
End If
End Sub
Sub Form_Load()
DrawWidth = 1 '设置画点的宽度
ForeColor = RGB(255, 0, 255) '设置画图颜色
End Sub
例如:
①下面程序用来判断在移动鼠标时是否按着右键:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = 2 Then Print "按下了右键"
End Sub
②如果只想判断某一个键是否被按下,则可用逻辑运算符And来实现。
例如:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button And 2 Then Print "按下了右键"
End Sub
③用类似的方法可以判断是否同时按下了左、右键:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = 3 Then Print "同时按着左、右键"
End Sub

10.4鼠标光标的形状
在使用Windows及其应用程序时,读者可能已经注意到,当鼠标光标位于不同的窗口内时,其形状是不一样的。有时候呈箭头状,有时候是十字,有时候是竖线,等等。在VisualBasic中,可以通过属性设置来改变鼠标光标的形状。
10.4.1 MousePointer属性
鼠标光标的形状通过MousePointer属性来设置。该属性可以在属性窗口中设置,也可以在程序代码中设置。
MousePointer的属性是一个整数,可以取0~15,其含义见P278表10.9.
当某个对象的MousePointer属性被设置为上表中的某个值时,鼠标光标在该对象内就以相应的形状显示。例如,假定一个文本框的MousePointer属性被设置为3,则当鼠标光标进入该文本框时,鼠标光标为“I"形,而在文本框之外,鼠标光标保持为默认形状。
10.4.2设置鼠标光标形状
MousePointer属性可以通过代码设置,也可以通过属性窗口设置。
1.在程序代码中设置 MousePointer属性
在程序代码中设置MousePointer属性的一般格式为:
对象.MousePointer=设置值
这里的“对象”可以是复选框、组合框、命令按钮、目录列表框、驱动器列表框、文件列表框、窗体、框架、图

像、标签、列表框、图片框、滚动条、文本框、屏幕等。“设置值”是表10.9中的一个值。
例如,在窗体上建立一个图片框,然后编写如下的事件过程:
Private Sub Picturel_MouseMove(Button As Integer, Shift As Integer,_
X As Single, Y As Single)
Picture1.MousePointer=2
End Sub
上述过程运行后,移动鼠标,当鼠标光标位于图片框内时,鼠标光标变为一个十字线;移出图片框后,鼠标光标变为默认形状(箭头)。
例10.10编写程序,显示鼠标光标的形状。
Private Sub Form_Click()
Static x As Integer
Cls
Print "Mousepointer Property is now”;x
Form1.MousePointer=x
x=x+1
If x=15 Then x=0
End Sub
上述程序运行后,把鼠标光标移到窗体内,每单击一次,变换一种鼠标光标的形状,依次显示鼠标光标的15个属性。
2.在属性窗口中设置MousePointer属性
单击属性窗口中的MousePointer属性条,然后单击设置框右端向下的箭头,将下拉显示MousePointer的15个属性值,如图10.11所示。单击某个属性值,即可把该值设置为当前活动对象的属性。
3.自定义鼠标光标
如果把MousePointer属性设置为99,则可通过Mouseicon属性定义自己的鼠标光标。有以下两种方法:‘
(1)如果在属性窗口中定义,可首先选择所需要的对象,再把MousePointer属性设置为“99一Custom”,然后设置Mouselcon属性,把一个图标文件赋给该属性(与设置Picture属性的方法相同)。
(2)如果用程序代码设置,则可先把MousePointer
属性设置为99,然后再用LoadPicture函数把一个图标
文件赋给Mouseicon属性。例如:
Forml.MousePointer=99
Forml.MouseIcon =LoadPicture("c:\vb98\graphics\icons\arrows\point02.ico")
4.鼠标光标形状的使用
在Windows中,鼠标光标的应用有一些约定俗成的规则。为了与Windows环境相适应,在应用程序中应遵守这些规则,主要有:
(1)表示用户当前可用的功能,如”I”形鼠标光标(属性值3)表示插入文本;十字形状(属性值2)表示画线或圆,或者表示选择可视对象以进行复制或存取。
(2)表示程序状态的用户可视线索,如沙漏鼠标(属性值11)表示程序忙,一段时间后将控制权交给用户。
(3)当坐标(X, Y)值为0时,改变鼠标光标形状。
注意,与屏幕对象(Screen)一起使用时,鼠标光标的形状在屏幕的任何位置都不会改变。不论鼠标光标移到窗体还是控件内鼠标形状都不会改变,超出程序窗口后,鼠标形状将变为默认箭头。如果设置“Screen.MousePointei=0 ",则可激活窗体或控件的

属性所设定的局部鼠标形状。
10.5拖放
通俗地说,所谓拖放,就是用鼠标从屏幕上把一个对象从一个地方“拖拉”(Dragging)到另一个地方再放下(Dropping).在Windows中,我们曾多次使用过这一操作,Visual Basic提供了让用户自由拖放某个控件的功能。
拖放的一般过程是,把鼠标光标移到一个控件对象上,按下鼠标键,不要松开,然后移动鼠标,对象将随鼠标的移动而在屏幕上拖动,松开鼠标键后,对象即被放下。通常把原来位置的对象叫做源对象,而拖动后放下的位置的对象叫做目标对象。在拖动的过程中,被拖动的对象变为灰色。
10.5.1与拖放有关的属性、事件和方法
除了菜单、计时器和通用对话框外,其他控件均可在程序运行期间被拖放。下面介绍与拖放有关的属性、事件和方法。
1.属性
有两个属性与拖放有关,即DragMode和DragIcon。
(1) DragMode属性
该属性用来设置自动或人工(手动)拖放模式。在默认情况下,该属性值为0(人工方式)。为了能对一个控件执行自动拖放操作,必须把它的DragMode属性设置为1该属性可以在属性窗口中设置,也可以在程序代码中设置,例如:
Picture1.DragMode=1
注意,DragMode的属性是一个标志,不是逻辑值,不能把它设置为True(-1).
如果把一个对象的DragMode属性设置为1,则该对象不再接收Click事件和MouseDown事件。
(2) DragIcon属性
在拖动一个对象的过程中,并不是对象本身在移动,而是移动代表对象的图标。也就是说,一旦要拖动一个控件,这个控件就变成一个图标,等放下后再恢复成原来的控件。DragIcon属性含有一个图片或图标的文件名,在拖动时作为控件的图标。例如:
Picture1.DragIcon=LoadPicture("c:\vb98\graphics\icons\computer\disk06.ico")
用图标文件"disk06.ico"作为图片框Picture I的DragIcon属性。当拖动该图片框时,图片框变成由disk06.ico所表示的图标。
2.事件
与拖放有关的事件是DragDrop和DragOver.当把控件(图标)拖到目标之后,如果松开鼠标键,则产生一个 DragDrop事件。该事件的事件过程格式如下:
Sub对象名_dragDrop (Source As Control, X As Single, Y As Single)
End Sub
该事件过程含有3个参数。其中Source是一个对象变量,其类型为Control,该参数含有被拖动对象的属性。例如:
If https://www.wendangku.net/doc/9612293800.html,="Folder" Then…
用来判断被拖动对象的Name属性是否为“Folder".参数X, Y是松开鼠标键放下对象时鼠标光标的位置。
DragOver事件用于图标的移动。当拖动对象越过一个控件时,产生DragOver事件。其事件过程格式如下:
Sub对象名_dragOver (Source As Control, X As Single,_

Y As Single, State As Integer)
End Sub
该事件过程有4个参数,其中Source参数的含义同前,X, Y是拖动时鼠标光标的坐标位置。State参数是一个整数值,可以取以下3个值:
0—鼠标光标正进入目标对象的区域;
1—鼠标光标正退出目标对象的区域;
2—鼠标光标正位于目标对象的区域之内。
3.方法
与拖放有关的方法有Move和Drag.其中Move方法已比较熟悉,下面介绍Drag方法。Drag方法的格式为:
控件.Drag整数
不管控件的DragMode属性如何设置,都可以用Drag方法来人工地启动或停止一个拖放过程。“整数”的取值为0, 1或2,其含义分别为:
0—取消指定控件的拖放;
1—当Drag方法出现在控件的事件过程中时,允许拖放指定的控件;
2—结束控件的拖动,并发出一个DragDrop事件。
10.5.2自动拖放
下面通过一个简单例子说明如何实现自动拖放操作。
第一步:在窗体上建立一个图片框,并把图标文件Phone02.ico装入该图片框中(图标文件Phone02.ico在“\vb98\graphics\icons\comm”目录下),如图10.12所示。
第二步:在属性窗口中找到DragMode属性,将其值由默认的“0一Manual”改为“1-Automatic”。
设置完上述属性后,运行该程序,即可自由地拖动图片框。但是,当松开鼠标键时,被拖动的控件又回到原来位置。其原因是,Visual Basic不知道把控件放到什么位置。
第三步:在程序代码窗口中的“对象”框中选择“Form”,在“过程”框中选择“DragDrop”,编写如下事件过程:
Private Sub Form_DragDrop (Source As Control, x As Single, y As Single)
Picture1.Move x, y
End Sub
上述过程中"Picturel.Move x, y"语句的作用是,将源对象(Picturel)移到(Move)鼠标光标(x,Y)处。
经过以上3步,就可以拖动控件了。不过在拖动时,整个Picture1控件都随着鼠标移动。按照拖放的一般要求,拖动过程中应把控件变成图标,放下时再恢复为控件。这可以通过以下两种方法来实现:
(1)在设计阶段,不要用Picture属性装入图像,而是用Dragicon属性装入图像,其操作与用Picture属性装入类似,即在建立图像框后,在属性窗口中找到并单击DragIcon属性条,然后利用“加载图片”对话框把图像装入图片框内。不过,这样装入后,图片框看上去仍是空白,只有在拖动时才能显示出来。
(2)在执行阶段,通过程序代码设置DragIcon属性。一般有以下3种形式:
Picture1.DragIcon=LoadPicture("c:\vb98\graphics\icons\comm\phone02.ico")
Picture1.Dragicon=Picturel.Picture
Picture2.DragIcon=Picturel.DragIcon
例10.11在窗体上建立两个控件,拖拉其中一个控

件,当把它放到第二个控件上时,该控件消失,单击窗体后再度出现。
首先在窗体上建立两个图片框,并在第一个图片框中装入一个图标(例如Phone02.ico).然后编写如下过程:
Private Sub Form_Load()
Picture1.Dragicon=picture1.Picture
Picture1.DragMode=1
End Sub
上述过程把图片框Picture1的Picture属性赋给其Dragicon属性,这样就可以在拖动时只显示图标而不显示整个控件。同时把拖放设置为自动方式。
下面的过程可以使Picture1消失在Picture2上:
Private Sub Picture2 DragDrop (Source As Control, x As Single, y As Single)
Source.Visible=False
End Sub
该过程是当把Picturel放到Picture2上时发生的事件,此时Picture 1的Visible属性被设置为False即消失不见。而下面的过程可以在单击窗体时使Picturel再度出现:
Private Sub Form_Click()
Picture1.Visible=True
End Sub
用下面的过程可以把Picture1拖到窗体上的(X,Y)处:
Sub Form_DragDrop (Source As Control, x As Single, y As Single)
Source.Move x, y
End Sub
运行上面的程序,可以把Picturel拖到窗体的任何位置。当拖到Picture2上时,图形消失,此时如果单击窗体,则图形(Picture l)重新出现。
如果希望某个控件在被拖过一个特定区域时能有某种不同的显示,则可以用DragOver事件过程来实现。例如在上面的例子中,当拖动图片框Picture 1经过Picture2时,为了使Picture2改变颜色,则可按如下步骤修改:
首先设置Picture 1的Draglcon属性和Picture2的颜色:
Private Sub Form一Load()
Picture l.Draglcon=picturel.Picture
Picture 1.DragMode=1
Picture2.ForeColor=RGB(255,0,0)’设置前景色
Picture2.BackColor二RGB(0,0,255)’设置背景色
End Sub
过程中的RGB函数用来设置颜色。
下面的过程通过DragDrop事件,在拖动Picture I经过Picture2时,改变Picture2的颜色:
Private Sub Picture2 DragOver (Source As Control, X As Single,_
Y As Single, State As Integer)
Dim temp As Long
If State=0 Or State=I Then
Beep
Beep
temp=Picture2.BackColor
Picture2.BackColor=Picture2.ForeColor
Picture2.ForeColor=temp
End If
End Sub
该过程是用鼠标拖动Picture 1经过Picture2时产生的反应。State参数为0表示进入Picture2,而State参数为1则表示离开Picture2。在进入或离开Picture2时,响铃(Beep),并使Picture2的前景色与背景色交换。
其余3个事件过程不变:
Private Sub Form C

lick()
Picture 1.Visible=True
End Sub
Private Sub Form_DragDrop (Source As Control, X As Single, Y As Single)
Source.Move X, Y
End Sub
Private Sub Picture2 DragDrop (Source As Control, X As Single, Y As Single)
Source. Visible=0
End Sub
10.5.3手动拖放
前面介绍的拖放称为自动拖放,因为DragMode属性被设置为“1一Automatic”。只要不改变该属性,随时都可以拖拉每个控件。与自动拖放不同,手动拖放不必把DragMode属性设置为“1 -Automatic”,仍保持默认的“0一Manual",而且可以由用户自行决定何时拖拉,何时停止。例如当按下鼠标键时开始拖拉,松开键时停止拖拉。如前所述,按下和松开鼠标键分别产生MouseDown和MouseUp事件。
前面介绍的Drag方法可以用于手动拖放。该方法的操作值为1时可以拖放指定的控件;为0或2时停止,如为2则在停止拖放后产生DragDrop事件。Drag方法与MouseDown,MouseUp事件过程结合使用,可以实现手动拖放。
为了试验手动拖放,可以按如下步骤操作:
(1)在窗体上建立一个图片框,装入一个图标(例如PhoneOlico)。
(2)设置图片框的DragIcon属性:
Private Sub Form_Load()
Picture1.DragIcon=Picturel.Picture
End Sub
(3)用MouseDown事件过程打开拖拉开关:
Private Sub Picturel_MouseDown (Button As Integer,_
Shift As Integer, x As Single, y As Single)
Picturel.Drag 1
End Sub
上述过程是当按下鼠标键时所产生的操作,即用Drag方法打开拖拉开关,产生拖拉操作。
(4)关闭拖拉开关,停止拖拉,并产生DragDrop事件:
Private Sub Picture l MouseUp (Button As Integer, Shift As Integer,_
x As Single, y As Single)
Picture 1.Drag 2
End Sub
(5)编写DragDrop事件过程:
Private Sub Form DragDrop (Source As Control, x As Single, y As Single)
Source.Move (x一Source.Width/2). (y一Source.Height/2)
End Sub
关闭拖拉开关(用Drag 2)后,将停止拖拉,并产生DragDrop事件。即在松开鼠标键后,
把控件放到鼠标光标位置。在一般情况下,鼠标光标所指的是控件的左上角,而在该过程中,
鼠标光标所指的是控件的中心。
例10.12用手动拖放模拟文件操作:从文件夹中取出文件,放入文件柜中,在放入前,先打开文件柜的抽屉,放入后再关上(学生自己完成)


相关文档