- 积分
- 1771
- 明经币
- 个
- 注册时间
- 2003-9-28
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
□ 如何一行程序太长,查阅起来很麻烦,能不能换行? 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
|
评分
-
查看全部评分
|