在Windows 95中删除一个文件或文件夹,只需用鼠标拖动文件(夹)到回收站,然后松开鼠标按钮即可,这种可视化的操作给用户带来了很大方便。如果程序开发人员在自己的程序中能做到这样,在自己的程序中也增加一个和Windows中风格相同的回收站,那么开发出的程序一定会受到用户的欢迎。怎么才能完成这种操作呢?本文介绍一种使用Visual Basic编程来完成这个动作的方法。
在Microsoft Windows资料中将按下鼠标按钮移动对象称为拖,将鼠标按钮的松开称为放。在Visual Basic中,如果项目中使用多个窗体,可以把一个图标从一个窗体拖放到另一个窗体。控件允许两种拖动,这取决于DragMode特性的两个不同的值。缺省情况是DragMode特性的值为0,除特定情况外不允许拖动控件;将这个特性的值改成1(Automatic)意味着用户可以拖动控件。
下面介绍拖动鼠标删除文件方法的实现过程。在Visual Basic的项目中允许用户拖动代表文件的图标至处理单元,此单元相当于Windows 95中的回收站,在给出警告之后把文件从磁盘中删除。
第一步,首先启动一个有两个窗体的项目,在启动窗体的下角加一个图片框(或图像控件),将这个控件的Picture特性设置成TRASH03.ICO文件中的图标,该文件位于Icon库的Computer子目录中。如果使用图片框,将AutoSize特性设置成True(如果选择一个图像控件,将Stretch特性设置成False)。
第二步,建立两个控件数组,一个是控件名为FileName的标签数组,另一个名字为Files的图像控件数组。将图像控件的DragMode特性设置成1(Automatic);将Visble特性设置成False,使标签和图像控件在运行时都不可见。通常,这些控件数组中的所有后续元素都继承这些特性。
这个项目中的大多数工作都体现在下面的DragDrop事件过程中:
Private Sub Garbage_DragDrop(Source As Control,X As Single,Y As Single) 该事件过程中的ControlIndex这一行代码找出被拖动控件的索引;接下来的两行代码使图片框和标签在放置操作后暂时不可见。ControlIndex变量让Visual Basic从标签数组中提取标题(也就是文件名)。消息框的类型为=vbYesNo,因此是个Yes/No消息框,标题是Confirmation Box。Kill命令从磁盘中删除文件。一旦程序删除了文件,就从控件数组中卸除标签和图片框。如果用户操作有误,确认的消息框返回No,则程序代码使得原来的图片框和标签再次显现。
下一步,建立一个称为Directons的通用过程,在一个窗体上显示出给用户提供的这个应用程序所需的信息,该窗体用作一个定制对话框。
Sub Directons () 对话框上OK按钮的Click过程是:
Private Sub btnOK-Click () 启动窗体的Form-Load 过程需要装入Directons窗体并调用显示信息的通用过程。它可以这样的:
Private Sub Form-Load () 启动窗体上的File 菜单有以下两项:
New File Spec
Exit
单击New File Spec菜单项让用户查看新的目录或驱动器。这个菜单项会调用一个通用过程GetFile,从磁盘读入文件名。
最后,是如何处理新的文件说明。用户第一次使用这个应用程序时,Visual Basic装入两个控件数组中一定数目的元素。程序需要改变标题中所含的信息,这些标题含有要删除的文件的名字。这两个控件数组只装入一次,然后使用Dir $命令建立一个字符串,从磁盘读入住处后将这个数组中的值赋给标签的Caption特性。该程序代码要读磁盘信息两次来恰当地重新确定数组尺寸。至于菜单项,因为“N”加了下划线,用户可以按N作为激活这一项的简捷键。菜单打开后这个菜单的控件名设置成mnuNewFileSpec。这个控件的Click事件过程是:
Private Sub mnuNewFileSpec Click 在启动窗体上显示文件的详细住处包含在一个通用过程DisplayFiles中,该过程只有一个参数,该过程如下:
Public Sub DisplayFiles (FileSpec As String) DO循环实现将图片框及标签分隔开,分隔的间距通过用不同的值试验确定。就像控件数组中的所有新元素一样,在将Visible特性设置成True之前,它们都是不可见的。
为了结束程序,只需将事件过程与窗体上的Quit菜单项关联,并增加一个查询Unload事件来结束程序。
Sub mnuQuit_Click() 以上程序的设计方法,介绍了怎样在Visual Basic中如何用鼠标拖动删除文件以及对文件的处理方法。程序设计通过控制鼠标的动态操作,使得用户操作时感到方便直观。如果在自己开发的的程序中能做到这些,就可以让自己的程序也会具有Windows风格。当然实现鼠标拖动删除文件方法很多,此处谈论的方法供各位同仁参考。
‘local variables
Dim Msg As String
Dim ControlIndex As Integer,YesNo As Integer
ControlIndex=Source.Index
Forml.FileName(ControlIndex).Visble=False
Msg= "Do you really want to delete"+
Forml.FileName(ControlIndex).Caption
YesNo=MsgBox(Msg,vbYesNo, "Confirmation Box")
If YesNo=vbYes Then
Kill(Forml.FileName(ControlIndex).Caption)
Unload Files(ControlIndex)
Unload Forml.FileName(ControlIndex)
Else
Forml.FileName(ControlIndex).Visible=True
Forml.File(ControlIndex).Visible=True
End If
End Sub
Forml.Hide
Form2.Show
Form2.Cls
Form1.Print "This program illustrates dragging and dropping mouse operations."
Form2.Print "The user gives a file spec inside the message box and a form"
Form2.Print "appears with icons labelled by all the files with that file specifcation."
Form2.Print "The user can drag the icon to be 'flushed' away i. e. deleted."
End Sub
Me.Hide
Form1.Show
End Sub
Load Form2
Directons
End Sub
Unload Form1
Load Form1
GetFile
End Sub
Unload Form1这个代码行清除控件数组的旧元素。GetFile 处理过程是这样的:
Public Sub GetFile ( )
'local variables
Dim FileSpec As String
Form2. Hide
FileSpesc=InputBox$ ("File specification?")
If FileSpesc= "" Then
Directons
Else
Form1.Show
DisplayFiles (FileSpec)
End If
End Sub
‘Local variables
Dim NameOfFile As String
Dim ControlIndex As Integer
Form1 .Show
Form1.Width=8000
Form1.Height=5500
Form1.Garbage.Move 7000,4200 'move the garbage can icon
NameOfFile=Dir $(FileSpec)
If NameOfFile= " " Then
MsgBox "No Files found with that file specification
End If
ControlIndex= ControlIndex +1 'start with index=1
Do While NameOgFile<> ""
Load Form1.Files(ControlIndex)
Load Form1.FileName(Contro;Index)
Column=(ControlIndex Mod 6)
Row=(ControlIndex-1)\6
Form1.Files(ControlIndex).Move(1300*Column)+275, 800*Row+2 'to allow for menu
Form1.FileName(ControlIndex).Move 1300*Column, 800*(Row+1)
Form1.Files(ControlIndex).Visible=True
Form1.Filename(ControlIndex).Visible=True
Form1.Filename(ControlIndex).Caption=NameOfFile
ControlIndex= ControlIndex+1
If ControlIndex >30 Then
MsgBox("Too many files!")
Exit Do
End If
NameOfFile=Dir$
Loop
End Sub
Unload Form2
Unload Me
End Sub
Sub Form_Unload(Cancel As Integer,Unload Mode As Integer)
End
End Sub
