★ 用VB在硬盘上创建一个文件夹:Mkdir语句。格式:
Mkdir "路径及文件夹名"
mkdir "c:\windows\desktop\李新宁" 在桌面上创建个名为"李新宁"的文件夹
又如: Private Sub Command2_Click()
MkDir "c:\windows\desktop\mydir"
End Sub
如果缺省路径,则为本VB程序的当前路径,如:mkdir "mydir",在当前目录下创建一个文件夹,名为mydir.
用VB删除一个文件夹(空文件夹):RmDir语句,格式:
rmdir "路径及文件夹名"
用法与上面类似,此不再说明.如果一个文件夹内有文件,那么,要先用KILL语句删除文件,再用rmdir删除文件夹。格式:
kill "路径及文件名"
在路径及文件名中,省略路径则指当前路径,并可用通配符"*"和"?"来删除多个文件,如:kill "*.txt" ,将当前目录下的所有文本文件全部删除。注意:KILL语句删除的文件不会放入回收站。
在调用函数或过程时,该函数或过程如果作为表达式,则其实参要括号,如果调用时是作为语句,实参则不要括号。下面两句是等价的。
SetWindowTextA Form1.hwnd, "API函数修改标题栏文字" --函数语句
Call SetWindowTextA(Form1.hwnd, "API函数修改标题栏文字") --函数为表达式
API调用格式中的 lib"库名" 有一点要注意,如果不是调用Windows\system文件夹下的DLL库,则要指明路径名,如:
public declare function lxnsdll lib "d:\student\mydll.dll"(byval a as integer,byval b as integer) as long
在程序中窗体的运行位置是用一个叫做"窗体布局"的窗口来调整的,可否用另外的替代法,而不用这个不精确的"窗体布局"窗口呢?
当然可以,那就是在代码中,例如要使窗体居于显示器中央,有两个新属性变量,screen.width和screen.height,分别表示本显示器的屏幕宽度(screen.width)和显示器高度(screen.height).用屏幕宽度减去窗体FORM1宽度再除以2,就可得到FORM的left左边距了(也就是横坐标吧),用屏幕高度减FORM1高度再除以2。就可得到FORM的top上边距了(纵坐标),这样便可居中,如下:
Form1.Left = (Screen.Width - Form1.Width) / 2
Form1.Top = (Screen.Height - Form1.Height) / 2
VB基本概念:对象--对象是具有某些特性的具体事物的抽象。
我在使用VB时遇到一个问题,我想用一个组框(frame1)将几个按纽括在一起,可是当组框画上去后却会把按纽都覆盖掉。按纽不见了(在frame1图层下面),怎么办?什么办法可以决定几个对象重合时,哪个在上,哪个在下?办法如下:1,选中要改变图层前后的对象;2,在"格式"菜单中"顺序"菜单项中选"置前"(在上面)或"置后"(在下面)即可。另外,在代码中也可以,用zorder方法,格式:
对象名.zorder 0或1(0为置前,1为置后)
frame1.zorder 1
重点笔记: 事件
在WINDOWS中最主要的事件就是鼠标事件,特别是其中的click单击事件,此外还有dblclick事件:双击事件,用法与click一样。
mousedown事件:鼠标按下时发生,有一个值得注意的参数button,它返回按下鼠标左键还是鼠标右键,采用if button=vbleftbutton...代码来写。
mouseup事件:鼠标先按下然后抬起时发生,用法与mousedown一样。
mousemove事件:鼠标经过时发生。
第二类的事件就是键盘事件,这类事件的掌握要加强。一个控件得到焦点后,就可以触发这一类事件,有以下几种:
keydown事件:按下键盘上某个键时发生。但键盘上键那么多,需要用它返回的keycode参数来指明按了哪个键,例下:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyB Then
Print "你按下了字母B"
ElseIf KeyCode = vbKeyF1 Then
Print "你按下了F1键"
End If
End Sub
注:在keycode参数中,主键盘上的数字键和数字小键盘上的数字键是不同的,主键盘上用vbkey0-vbkey9表示,而小键盘上的键用vbkeyNumpad0-vbkeyNumpad9来表示。
keyup事件:松开按键时发生,与keydown事件用法一样。
keypress事件:按下某个键接着松开这个键时发生。注意,它的参数与keydown及keyup不同,它是采用字符ASCII码的方式,即用一个叫Keyascii的参数名,可以区分大小写,但有些功能键不能用。
if keyascii=0到255的一个整数 then ...来写,例如:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 120 Then '120是小写字母x的ASCII码值
Unload Me
ElseIf KeyAscii < 48 Or KeyAscii > 57 Then '数字键的ASCII码在这个范围内
MsgBox ("你输入的不是数字"), 48
End If
End Sub
其他重要的事件有:
change事件:当对象的内容改变时发生。
gotfocus事件:当焦点从一个对象移动到当前对象时,当前对象发生gotfocus事件。
lostfocus事件:当焦点从当前对象移出时,当前对象会发生lostfocus事件。
★ keydown事件和keypress事件有什么实际运用上的差别?keydown多常用于功能键(如F1),需要shift,ctrl,Alt+字符键的"组合键",区分数字小键盘和常规数字键等keypress所不能的情况,keypress以ASCII码来区分按键,侧重"键的内容",而keydown和keyup侧重"键的位置"。
我想在文本框中限制只能输入数字,怎么办最方便?可用keypress事件,如下:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < 48 Or KeyAscii > 57 Then
KeyAscii = 0 等于0表示没按键,它在text1对象text属性接入字符前产生,因
Beep 此可限制输入。
End If
End Sub

 

 

集合(collection):用来存储类似数组的一组同类变量,它与数组不同的是,集合是一种对象,它不仅可通过索引值来访问其中的元素,还可通过关健字来访问其中元素。声明格式:
DIM(或PUBLIC) 集合名 as new collection
dim lxn as new collection
既然集合是一个对象,就用方法和属性去操作它,有三个方法和一个属性:
ADD方法:添加元素到集合对象中;格式:
集合名.add 元素内容,关健字,添加到…前,添加到…后(添加位置)
lxn.add 23,"李新宁", ,"李冬冬"
上例表示在集合中"李冬冬"关健字所对应元素后面添加"李新宁"为关健字的元素23(我是想表示年纪)。
REMOVE方法:删除一个元素;
集合名.remove "关健字或索引位置"
lxn.remove "李新宁" 或 lxn.remove 5 (如果元素"23"的索引号为5)
索引值是VB自动给每个集合元素添加的,从第1个元素索引号为1开始。
ITEM方法:引用集合对象中的元素,可省略,格式: 集合名.item(关健字)
省略为:集合名(关健字或索引位置)
x=lxn("李新宁") x就等于23。
也可用索引位置,如 x=lxn(5)(如果"李新宁"所对元素的索引为5),索引位置(其实就是下标)最小从1开始。
COUNT属性:返回集合中的元素个数。格式:集合名.count.如y=lxn.count,y就等于集合中元素个数。
自定义过程:Private(或public,static) sub 过程名(形参)
……
end sub
调用:Call 过程名(实参) 或 过程名 实参
自定义函数:private(或public,static) function 函数名(形参)as 类型
……
函数名=值
end function
调用:函数名(实参) 为一个确定值,
上面函数与过程区别是:函数一定有返回值,所以定义时要指明(返回值)类型,并在函数过程中设定"函数名=值"来确定返回值。调用函数时如果也用CALL,则函数的返回值就失去意义(这样合是合法)。
★ 基本的类操作:类形象理解为"控件"即可,创建一个类,也就是自已创建一个象工具箱中控件那样的"新"控件。自己设置添加它的属性,方法。只不过自己发明的新控件没有图标,所有属性,方法,事件只能在代码中进行而已。
类是用来创建对象实例的模板。
1,在"工程"菜单中选"添加类模块"。在属性窗口修改它的"(名称)"属性为想要的名字,这个名字将作为这个类(为好理解,叫成"新控件")的名字。
2,制作新控件属性:在类模块中通用部分(此时全都是)用Public声明一群变量,要指明具体类型,这些所有变量就成了新控件的属性。就这么简单。
3,制作新控件方法:在类模块中建立新过程(用public sub...end sub或public function...end function),这些过程名将作为新控件的方法名。在过程里编写新控件功能的代码。
4,编写类模块事件,类模块事件只有initialize和terminate两种。当我们在程序中用"新控件"创建一个对象时,在刚刚创建一刹那,触发这里的initialize事件,这个事件可处理对象实例创建时需要处理的初始化。
新控件的运用:如何使用自己新做的"控件"呢?因为它没有在工具箱中的图标,不可直按"画"到窗体上,而要完全在代码中进行。
1,在通用部分声明一个对象变量,使它指向"新控件"。如Dim lxn As class1
class1是我自定的"新控件"名。注意:此时只是声明变量lxn为对象变量,但并没有具体代表哪个对象,要用SET语句来确定对象变量的值。用set…new…新建类模块对象。
2,在FORM LOAD事件中创建一个"新控件"的对象,用SET…NEW语句,
set 对象变量=new 新控件
set lxn=new class1
这时,对象变量名就成了创建的对象的名字(注:没有NEW是普通的赋值,有NEW就是新建对象)。
3,进行对象可进行的各种操作。如:lxn.condition=true
下面是自制一个"跑表"控件的例子。
A ,类模块中:
Option Explicit
Public timectl As Date '这三个变量作为"跑表"类的属性
Public condition As Boolean 'timectl为时间长度,condition为计时/停止状态
Public starttime As Date 'starttime为基准时间
Public Sub start() '开始计时方法
condition = True
starttime = Time starttime赋值为系统时钟的当前时间
End Sub
Public Sub stoptime() '停止计时方法
Dim lxn As Date
condition = False
lxn = Time - starttime 时间差
timectl = timectl + lxn 进行多次调用该过程时累积时间长度
End Sub
Public Sub reset() '清0方法
condition = False
timectl = 0
starttime = Time
End Sub

 

 

Private Sub Class_Initialize() 供新建实例时初始化
starttime = Time
timectl = Time - starttime
condition = False
End Sub
B,程序中:
Dim mywatch As myclass 声明对象变量将指向myclass创建的实例

 

 

Private Sub Command1_Click()
Set mywatch = New myclass 重新新建
Text1.Text = mywatch.timectl

 

 

End Sub

 

 

Private Sub Command2_Click()
Select Case mywatch.condition
Case False
mywatch.start
Text1.Text = "on......"
Case True
mywatch.stoptime
Text1.Text = mywatch.timectl
End Select
End Sub

 

 

Private Sub Form_Load()
Set mywatch = New myclass 新建对象
Text1.Text = mywatch.timectl
End Sub
★ 程序中的APP对象,它主要提供如本程序的标题,版本信息,路径等有时很必要的信息,常用属性有:
App.Title:返回本程序的标题。
App.Path:返回本程序所在的路径。与curdir不完全相同,curdir是指当前路径。如果1个程序创建了快捷方式,则App.path和curdir就可能不同了。应以App.path为准。
App.EXEname:返回本程序不含扩展名的根名
如何在VB中控制关机?除了以前讲到的exitwindowsex函数外,还有一种更简单的方法,只要在你需要的地方,比如按扭等等,在事件过程中加入
Shell "rundll32.exe user.exe,exitwindows" 就可以了。对WIN2000无效!
在VB中可打开控制面板,由用户进行设置,打开主面板:在事件过程中写
x = Shell("rundll32.exe shell32.dll,Control_RunDLL",1)
也可打开各个具体项目,如
x = Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl", 1)
打开的是控制面板中"多媒体"项。而
x = Shell("rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5", 1)
打开的是"辅助选项"项目。而
x = Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2", 1)显示的是"显示器"项目(中的"外观"选项卡,注:各个选项卡由尾部参数决定,这里是2)。
在文本输入时,我们可通过设置ASCII码的chr(13)+chr(10)来使文本换行,而在VB程序中,可用一个常数vbCrLf来代替这两个ASCII码表示换行,如:
text1.text="您如果需要的话" & chr(13)+chr(10) & "可以来找我"
可写为: text1.text="您如果需要的话" & vbCrLf & "可以来找我"
关于在VB程序中用键盘的问题:1,很多控件运行时的使用都可以采用在其caption属性中写"& 快捷键"的方式指定键盘访问键(如菜单,按纽,复选框,选项按纽等等) 2,TAB键常用来对各对象间的切换。
3,设计时改变选定对象的大小:Shift+方向键;
设计时改变选定对象的位置:Ctrl+方向键。