明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6113|回复: 13

Visual Basic编程问答集(一)很有帮助的

    [复制链接]
发表于 2004-6-30 13:50 | 显示全部楼层 |阅读模式
□ 如何一行程序太长,查阅起来很麻烦,能不能换行?
VB的程序代码是允许换行书写的,只要在每次换行的最后一个字
符加上换行字符“_”就可以了。例如:
Sub PicMove()
Frm.Picture2.Left = Frm.Picture1.Left + _ ’加上换行符
Frm.Picture1.Width
End Sub

□ 如何在设计的时候清空存在的图片?
用鼠标点中该图片,按F4列出其属性窗口,然后再选中Picture
属性,按Del键便可清空图片。

□ Visual Basic 如何注释一段较长程序代码?
VB注释程序代码的符号是“'”,只要在某行程序前面加上
“'”,就可以注释该行程序。但如果程序代码很长的时候,一行
一行地注释令人觉得难以忍受。VB本身提供了这个功能,在主菜
单“视图”选项的“工具栏”下,选中Edit,VB的界面会出现
一排工具按钮,其中的(图片)用于“设置注释块”和“解除注
释块”。

□ 怎么实现鼠标一移上去就出现小提示窗口的功能?
VB 5.0里每个控件都有ToolTipText属性,只要加上一行程序
就可以了。例如:Label1.ToolTipText = "这是提示!"。

□ 如何获得当前软件的运行磁盘目录和命令行参数?
VB里面有个系统对象叫App。App.Path就是当前软件的运行目
录。而命令行参数存放在一个系统变量里面,叫Command。程序语
句如下:
Label1.Caption=App.Path
Label2.Caption=Command$

□ 我想换掉鼠标显示的形状,怎么做?
VB提供的系统控件一般都有MousePointer和MouseIcon属性。
我们可以寻找自己喜欢的*.ICO,*.CUR文件,实现的程序如下:
Screen.MousePointer= 99 ’用户鼠标类型
Screen.MouseIcon=LoadPicture("C:\ABC\1.ICO") ’读取鼠标文件

□ 如何判断一个文件是否存在?
可以通过打开该文件试图读取资料的方法实现,如果文件打开
成功,证明该文件存在;反之,文件就不存在。
Function FileExists(fname$) As Boolean
On Error Resume Next ’设置错误处理
Dim X as Integer

X = FreeFile ’取得一个空闲文件句柄
Open fname$ For Input As X ’试图打开该文件
If Err = 0 Then ’如果打开成功
FileExists = True
Else ’否则
FileExists = False
End If
Close X
End Function

□ 如何设置程序的错误出口?
On Error语句用于程序的错误出口处理。一般的处理方法有两种。
1) 遇到错误跳转到某一行程序去执行,On Error GoTo someline。
例如:
On Error GoTo ERR_LINE
...
Label1.Caption=“正确执行”
ERR_LINE:
...
Label1.Caption=“出错了!”

2) 遇到错误之后忽略当前错误,继续执行,On Error Resume Next。
例如:
3) On Error Resume Next
...
Label1.Caption=“不管对不对都要执行”
...

□ 怎样获得键盘输入和判断敲键的Ascii值?
把窗体的KeyPreview属性设置成True,然后在Form_KeyPress
事件里编写程序代码如下:
Private Sub Form_KeyPress(KeyAscii As Integer)
Me.Caption = Str(KeyAscii)
...
End Sub

□ VB有位操作吗?怎么知道一个字节的某个位的值?
下面是一个字节的异或操作例子:
Private Sub Form_Click()
Dim bitvalue As Byte ’定义字节变量

bitvalue = &H10 ’16进制赋值
bitvalue = bitvalue Xor &H10 ’异或操作XOR
Debug.Print bitvalue ’输出结果
End Sub

□ 我希望窗体一运行就在屏幕的中央,怎么实现?
VB的系统对象Screen记录了当前显示模式的高度和宽度,
可以利用这个值来设置窗体的位置。
Sub CenterForm(frm As Form) ’定义过程
frm.Move (Screen.width - frm.width) \ 2, (Screen.Height - frm.Height) \ 2
End Sub

Private Sub Form_Load()
CenterForm Me ’调用过程
End Sub

□ 很多软件都有鼠标一按下文字框TextBox,就选中所有文
字的功能,是怎么实现的?
Sub TextFocus(ctl As Control) ’定义过程
ctl.SelStart = 0
ctl.SelLength = Len(ctl.Text)
End Sub

Private Sub Text1_GotFocus()
TextFocus Text1 ’过程调用
End Sub

□ 如何屏蔽列表框Combo的键盘输入?
Private Sub Combo1_KeyPress(KeyAscii As Integer)
KeyAscii=0
End Sub

□ 如何使一行字符串垂直显示?
’函数:垂直显示字符串
Function RotateString(in_str As String) As String
Dim tmpstr As String
’把每个字符都取出来加上回车换行符号
For i = 1 To Len(in_str)
tmpstr = tmpstr + Mid$(in_str, i, 1) & vbCrLf
Next i
RotateString = tmpstr
End Function

Private Sub Form_Click()
Label1.Caption = RotateString("你知道我在这里吗?")
End Sub

□ 如何定义一个数据结构?
Visual Basic是使用Type ... End Type来实现数据结构的
定义的。例如:
'矩形描述定义
Type RECT_STRUCT
Left As Integer ’坐标
Top As Integer
Right As Integer ’宽高
Bottom As Integer
Color As Long ’颜色
Caption As String ’标题
End Type

Dim MyRect As RECT_STRUCT ’根据数据结构定义结构变量

□ 如何把变量的数据写入文件,再从文件里读出来?
文件的操作有打开文件(Open)、写入文件(Write)、读取文
件(Input),关闭文件(Close)。
’写入文件操作
Function SaveData(fname$) As Boolean
On Error Resume Next ’设置错误处理
Dim int1 As Integer
Dim str1 As String
Dim X As Integer

int1=20 ’变量赋初值
str1=“这是字符串”
X = FreeFile ’取得一个空闲文件句柄
Open fname$ For Output As X ’试图打开该文件
If Err <> 0 Then ’如果打开不成功
SaveData=False
Exit Function
End If
Write X, int1,str1
Close X
SaveData=True
End Function

’读取文件操作
Function ReadData(fname$) As Boolean
On Error Resume Next ’设置错误处理
Dim int1 As Integer
Dim str1 As String
Dim X as Integer

X = FreeFile ’取得一个空闲文件句柄
Open fname$ For Input As X ’试图打开该文件
If Err <> 0 Then ’如果打开不成功
ReadData=False
Exit Function
End If
Input X, int1,str1
Close X
ReadData=True
’输入执行结果
Debug.Print int1,str1
End Function

□ 我想在窗体中按下鼠标右键就弹出一个菜单,怎么做?
首先按下Ctrl+E设计一个菜单PopMenu(具体的菜单设计操作参考
帮助文件),把菜单的Visible设置成False。在Form_MouseUp中编写
程序如下:
If Button And 2 ’鼠标右键按下
PopupMenu PopMenu
End If

□ Visual Basic里面的整数和字符串如何互相转换?
VB提供了系统函数Val()和Str(),可以用来实现整数和字符串之间的
转换。例子如下:
Sub Str2Int()
Dim int1 As Integer
Dim str1 As String
int1=100
str1=Str(int1)
Debug.Print str1
str1=“400”
int1=Val(str1)
Debug.Print int1
End Sub

□ 我可以在一个窗体里执行别的窗体的程序代码吗?
是可以的,我们可以用“窗体.代码”的模式去执行别的窗体的代
码。先假设我在窗体frm2里要执行窗体frm1的Form_Click代码,程
序如下:
Private Sub Form_Click()
frm1.Form_Click() ’在frm2里执行frm1的From_Click代码
End Sub

□ 如何在不改变数组内容的情况下重定义数组的范围?
ReDim可以用来重新定义数组的范围,重定义后还要保留数组
的原值,可以用Preserve说明。例如:
Sub ReDim_Data()
Dim tmpdim() as Integer ’定义一个未知范围的数组
ReDim tmpdim(10) ’设定数组的范围0..9
tmpdim(0)=1
tmpdim(1)=2
ReDim Preserve tmpdim(20) ’设定数组的范围0..19,并保留数据
Debug.Print tmpdim(0), tmpdim(1),
End Sub

□ 怎样运行在我的程序里执行别的软件?
系统提供的函数Shell可以解决这个问题。Shell函数的参数为可执
行文件名和运行模式。例如:
Shell“C:\PWIN95\WORDPAD.EXE README.TXT”,1

□ 如何用打印机输出一张图片?
先把图片调入窗体中,然后用PaintPicture方法(Method)把图片打印
出来。
Sub PrintPhoto()
Picture1.Picture = LoadPicture(“C:\ABC\1.BMP”)
Printer.PaintPicture Picture1.Picture, Picture1.Left, Picture1.Top, _
Picture1.Width, Picture1.Height, vbMergeCopy
End Sub

Visual Basic编程问答集(二)
(接上期)
Write X, int1,str1
Close X
SaveData=True
End Function

’读取文件操作
Function ReadData(fname$) As Boolean
On Error Resume Next ’设置错误处理
Dim int1 As Integer
Dim str1 As String
Dim X as Integer

X = FreeFile ’取得一个空闲文件句柄
Open fname$ For Input As X ’试图打开该文件
If Err <> 0 Then ’如果打开不成功
ReadData=False
Exit Function
End If
Input X, int1,str1
Close X
ReadData=True
’输入执行结果
Debug.Print int1,str1
End Function

□ 我想在窗体中按下鼠标右键就弹出一个菜单,怎么做?
首先按下Ctrl+E设计一个菜单PopMenu(具体的菜单设计操作参考
帮助文件),把菜单的Visible设置成False。在Form_MouseUp中编写
程序如下:
If Button And 2 ’鼠标右键按下
PopupMenu PopMenu
End If

□ Visual Basic里面的整数和字符串如何互相转换?
VB提供了系统函数Val()和Str(),可以用来实现整数和字符串之间的
转换。例子如下:
Sub Str2Int()
Dim int1 As Integer
Dim str1 As String
int1=100
str1=Str(int1)
Debug.Print str1
str1=“400”
int1=Val(str1)
Debug.Print int1
End Sub

□ 我可以在一个窗体里执行别的窗体的程序代码吗?
是可以的,我们可以用“窗体.代码”的模式去执行别的窗体的代
码。先假设我在窗体frm2里要执行窗体frm1的Form_Click代码,程
序如下:
Private Sub Form_Click()
frm1.Form_Click() ’在frm2里执行frm1的From_Click代码
End Sub

□ 如何在不改变数组内容的情况下重定义数组的范围?
ReDim可以用来重新定义数组的范围,重定义后还要保留数组
的原值,可以用Preserve说明。例如:
Sub ReDim_Data()
Dim tmpdim() as Integer ’定义一个未知范围的数组
ReDim tmpdim(10) ’设定数组的范围0..9
tmpdim(0)=1
tmpdim(1)=2
ReDim Preserve tmpdim(20) ’设定数组的范围0..19,并保留数据
Debug.Print tmpdim(0), tmpdim(1),
End Sub

□ 怎样运行在我的程序里执行别的软件?
系统提供的函数Shell可以解决这个问题。Shell函数的参数为可执
行文件名和运行模式。例如:
Shell“C:\PWIN95\WORDPAD.EXE README.TXT”,1

□ 如何用打印机输出一张图片?
先把图片调入窗体中,然后用PaintPicture方法(Method)把图片打印
出来。
Sub PrintPhoto()
Picture1.Picture = LoadPicture(“C:\ABC\1.BMP”)
Printer.PaintPicture Picture1.Picture, Picture1.Left, Picture1.Top, _
Picture1.Width, Picture1.Height, vbMergeCopy
End Sub

□ 怎样取得一个字符串在另外一个字符串中出现的次数?
Public Function sCount(String1 As String, String2 As String) As Integer
Dim I As Integer, iCount As Integer
I = 1
Do
If (I > Len(String1)) Then Exit Do
I = InStr(I, String1, String2, vbTextCompare)
If I Then
iCount = iCount + 1
I = I + 2
DoEvents
End If
Loop While I
sCount = iCount
End Function

□ 怎样在一个字符串中删除里面的另外一个字符串?
Public Sub sRemove(String1 As String, String2 As String)
Dim I As Integer
I = 1
Do
If (I > Len(String1)) Then Exit Do
I = InStr(I, String1, String2)
If I Then
String1 = Left$(String1, I - 1) + Mid$(String1, I + Len(String2)+1)
I = I + 2
DoEvents
End If
Loop While I
End Sub

□ 怎样在一个字符串中替换里面的另外一个字符串?
Public Sub sReplace(String1 As String, String2 As String, RepString As String)
Dim I As Integer
I = 1
Do
If (I > Len(String1)) Then Exit Do
I = InStr(I, String1, String2)
If I Then
String1 = Left$(String1, I - 1) + RepString + Mid$(String1, I + Len(String2)+1 )
I = I + 2
DoEvents
End If
Loop While I
End Sub

□ 如何计算一个字符串中的行数?
Function CountStringLine(src_string As String) As Integer
On Error Resume Next
Dim string_flag As Integer
Dim line_cnt As Integer
Dim test_string As String
line_cnt = 0 '初始--> 行数为1
string_flag = 1 '标志为1
test_string = src_string
DoEvents
Do
line_cnt = line_cnt + 1
string_flag = InStr(test_string, vbCrLf) ’判断回车换行
test_string = Right(test_string, Len(test_string) - string_flag - 1)
Loop Until string_flag <= 0
CountStringLine = line_cnt
End Function

□ 如何从一个字符串中读取一行字符?
Function ReadStringLine(src_str As String, lineno As Integer) As String
On Error Resume Next
Dim string_flag As Integer
Dim line_cnt As Integer
Dim test_string As String
Dim ret_string As String
line_cnt = 0 '初始--> 行数为1
string_flag = 1 '标志为1
test_string = Right(src_str, 2)
If test_string <> vbCrLf Then
test_string = src_str + vbCrLf
Else
test_string = src_str
End If
DoEvents
Do
line_cnt = line_cnt + 1
string_flag = InStr(test_string, vbCrLf)
ret_string = Left(test_string, string_flag)
test_string = Right(test_string, Len(test_string) - string_flag - 1)
Loop Until lineno <= line_cnt
'If line_cnt = 1 Then
' ReadStringLine = ret_string
'Else
ReadStringLine = Left(ret_string, Len(ret_string) - 1)
'End If
End Function

----------------------------------------------------------
Visual Basic编程问答集(三)
(接上期)

□ 怎么在VB中实现Delphi那样的MouseEnter和MouseExit的功能?
VB中的鼠标事件驱动只有MouseDown,MouseMove,MouseUp三个事件,没有象
Delphi那样提供MouseEnter(OnEnter)和MouseExit(onExit)的事件。而这两个事件是平时编写程序经常要用到的,我们可以通过调用SetCapture和ReleaseCapture这两个Windows API函数的方法来实现它。具体步骤如下:
1) 在VB中新建一个标准EXE工程;
2) 画出一个按钮Command1;
3) 在窗体Form1中定义Windows API的声明;
Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
4) 在Command1的MouseMove事件中编写以下代码:
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim MouseEnter As Boolean '鼠标进入的标志位

MouseEnter = (0 <= X) And (X <= Command1.Width) And (0 <= Y) And (Y <= Command1.Height) '计算鼠标的移动是否在Command1里面
If MouseEnter Then '鼠标已经进入
Me.Caption = "Mouse In Button!"
SetCapture Command1.hWnd
Else '鼠标已经离开
Me.Caption = "Mouse Out!"
ReleaseCapture
End If
End Sub

评分

参与人数 2明经币 +1 金钱 +10 贡献 +5 激情 +5 收起 理由
3xxx + 1 赞一个!
雪山飞狐_lzh + 10 + 5 + 5 【精华】好文章

查看全部评分

发表于 2004-6-30 14:40 | 显示全部楼层
你倒是蛮热心的,真是辛苦了,谢谢!
发表于 2004-6-30 19:14 | 显示全部楼层
挺不错的,对初学者很有帮助。楼主辛苦了!
发表于 2004-7-7 21:45 | 显示全部楼层
good
发表于 2004-7-20 01:59 | 显示全部楼层
只对初学者很有帮助
发表于 2004-9-1 10:21 | 显示全部楼层
谢谢
发表于 2004-9-1 11:04 | 显示全部楼层
Well done mate!
发表于 2004-9-6 04:06 | 显示全部楼层
谢谢楼主。
发表于 2004-9-6 17:04 | 显示全部楼层
不错,希望后面还有更多。
发表于 2013-12-13 22:29 | 显示全部楼层
很基础的资料,也很实用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-23 22:00 , Processed in 0.226706 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表