Visual Basic编程问答集(一)很有帮助的
□ 如何一行程序太长,查阅起来很麻烦,能不能换行?<BR>VB的程序代码是允许换行书写的,只要在每次换行的最后一个字<BR>符加上换行字符“_”就可以了。例如:<BR>Sub PicMove()<BR>Frm.Picture2.Left = Frm.Picture1.Left + _ ’加上换行符<BR>Frm.Picture1.Width<BR>End Sub<BR><BR>□ 如何在设计的时候清空存在的图片?<BR>用鼠标点中该图片,按F4列出其属性窗口,然后再选中Picture<BR>属性,按Del键便可清空图片。<BR><BR>□ Visual Basic 如何注释一段较长程序代码?<BR>VB注释程序代码的符号是“'”,只要在某行程序前面加上<BR>“'”,就可以注释该行程序。但如果程序代码很长的时候,一行<BR>一行地注释令人觉得难以忍受。VB本身提供了这个功能,在主菜<BR>单“视图”选项的“工具栏”下,选中Edit,VB的界面会出现<BR>一排工具按钮,其中的(图片)用于“设置注释块”和“解除注<BR>释块”。<BR><BR>□ 怎么实现鼠标一移上去就出现小提示窗口的功能?<BR>VB 5.0里每个控件都有ToolTipText属性,只要加上一行程序<BR>就可以了。例如:Label1.ToolTipText = "这是提示!"。<BR><BR>□ 如何获得当前软件的运行磁盘目录和命令行参数?<BR>VB里面有个系统对象叫App。App.Path就是当前软件的运行目<BR>录。而命令行参数存放在一个系统变量里面,叫Command。程序语<BR>句如下:<BR>Label1.Caption=App.Path<BR>Label2.Caption=Command$<BR><BR>□ 我想换掉鼠标显示的形状,怎么做?<BR>VB提供的系统控件一般都有MousePointer和MouseIcon属性。<BR>我们可以寻找自己喜欢的*.ICO,*.CUR文件,实现的程序如下:<BR>Screen.MousePointer= 99 ’用户鼠标类型 <BR>Screen.MouseIcon=LoadPicture("C:\ABC\1.ICO") ’读取鼠标文件<BR><BR>□ 如何判断一个文件是否存在?<BR>可以通过打开该文件试图读取资料的方法实现,如果文件打开<BR>成功,证明该文件存在;反之,文件就不存在。<BR>Function FileExists(fname$) As Boolean<BR>On Error Resume Next ’设置错误处理<BR>Dim X as Integer<BR><BR>X = FreeFile ’取得一个空闲文件句柄<BR>Open fname$ For Input As X ’试图打开该文件<BR>If Err = 0 Then ’如果打开成功<BR>FileExists = True<BR>Else ’否则<BR>FileExists = False<BR>End If<BR>Close X<BR>End Function<BR><BR>□ 如何设置程序的错误出口?<BR>On Error语句用于程序的错误出口处理。一般的处理方法有两种。<BR>1) 遇到错误跳转到某一行程序去执行,On Error GoTo someline。<BR>例如:<BR>On Error GoTo ERR_LINE<BR>...<BR>Label1.Caption=“正确执行”<BR>ERR_LINE:<BR>...<BR>Label1.Caption=“出错了!”<BR><BR>2) 遇到错误之后忽略当前错误,继续执行,On Error Resume Next。<BR>例如:<BR>3) On Error Resume Next<BR>...<BR>Label1.Caption=“不管对不对都要执行”<BR>...<BR><BR>□ 怎样获得键盘输入和判断敲键的Ascii值?<BR>把窗体的KeyPreview属性设置成True,然后在Form_KeyPress<BR>事件里编写程序代码如下:<BR>Private Sub Form_KeyPress(KeyAscii As Integer)<BR>Me.Caption = Str(KeyAscii)<BR>...<BR>End Sub<BR><BR>□ VB有位操作吗?怎么知道一个字节的某个位的值?<BR>下面是一个字节的异或操作例子:<BR>Private Sub Form_Click()<BR>Dim bitvalue As Byte ’定义字节变量<BR><BR>bitvalue = &H10 ’16进制赋值<BR>bitvalue = bitvalue Xor &H10 ’异或操作XOR<BR>Debug.Print bitvalue ’输出结果 <BR>End Sub<BR><BR>□ 我希望窗体一运行就在屏幕的中央,怎么实现?<BR>VB的系统对象Screen记录了当前显示模式的高度和宽度,<BR>可以利用这个值来设置窗体的位置。<BR>Sub CenterForm(frm As Form) ’定义过程<BR>frm.Move (Screen.width - frm.width) \ 2, (Screen.Height - frm.Height) \ 2<BR>End Sub<BR><BR>Private Sub Form_Load() <BR>CenterForm Me ’调用过程<BR>End Sub<BR><BR>□ 很多软件都有鼠标一按下文字框TextBox,就选中所有文<BR>字的功能,是怎么实现的?<BR>Sub TextFocus(ctl As Control) ’定义过程<BR>ctl.SelStart = 0<BR>ctl.SelLength = Len(ctl.Text)<BR>End Sub<BR><BR>Private Sub Text1_GotFocus()<BR>TextFocus Text1 ’过程调用<BR>End Sub<BR><BR>□ 如何屏蔽列表框Combo的键盘输入?<BR>Private Sub Combo1_KeyPress(KeyAscii As Integer)<BR>KeyAscii=0<BR>End Sub<BR><BR>□ 如何使一行字符串垂直显示?<BR>’函数:垂直显示字符串<BR>Function RotateString(in_str As String) As String<BR>Dim tmpstr As String <BR>’把每个字符都取出来加上回车换行符号<BR>For i = 1 To Len(in_str) <BR>tmpstr = tmpstr + Mid$(in_str, i, 1) & vbCrLf <BR>Next i<BR>RotateString = tmpstr<BR>End Function<BR><BR>Private Sub Form_Click()<BR>Label1.Caption = RotateString("你知道我在这里吗?")<BR>End Sub<BR><BR>□ 如何定义一个数据结构?<BR>Visual Basic是使用Type ... End Type来实现数据结构的<BR>定义的。例如:<BR>'矩形描述定义<BR>Type RECT_STRUCT<BR>Left As Integer ’坐标<BR>Top As Integer <BR>Right As Integer ’宽高<BR>Bottom As Integer<BR>Color As Long ’颜色<BR>Caption As String ’标题<BR>End Type<BR><BR>Dim MyRect As RECT_STRUCT ’根据数据结构定义结构变量<BR><BR>□ 如何把变量的数据写入文件,再从文件里读出来?<BR>文件的操作有打开文件(Open)、写入文件(Write)、读取文<BR>件(Input),关闭文件(Close)。<BR>’写入文件操作<BR>Function SaveData(fname$) As Boolean<BR>On Error Resume Next ’设置错误处理<BR>Dim int1 As Integer<BR>Dim str1 As String<BR>Dim X As Integer<BR><BR>int1=20 ’变量赋初值<BR>str1=“这是字符串”<BR>X = FreeFile ’取得一个空闲文件句柄<BR>Open fname$ For Output As X ’试图打开该文件<BR>If Err <> 0 Then ’如果打开不成功<BR>SaveData=False<BR>Exit Function <BR>End If<BR>Write X, int1,str1<BR>Close X<BR>SaveData=True<BR>End Function<BR><BR>’读取文件操作<BR>Function ReadData(fname$) As Boolean<BR>On Error Resume Next ’设置错误处理<BR>Dim int1 As Integer<BR>Dim str1 As String<BR>Dim X as Integer<BR><BR>X = FreeFile ’取得一个空闲文件句柄<BR>Open fname$ For Input As X ’试图打开该文件<BR>If Err <> 0 Then ’如果打开不成功<BR>ReadData=False<BR>Exit Function <BR>End If<BR>Input X, int1,str1<BR>Close X<BR>ReadData=True<BR>’输入执行结果<BR>Debug.Print int1,str1<BR>End Function<BR><BR>□ 我想在窗体中按下鼠标右键就弹出一个菜单,怎么做?<BR>首先按下Ctrl+E设计一个菜单PopMenu(具体的菜单设计操作参考<BR>帮助文件),把菜单的Visible设置成False。在Form_MouseUp中编写<BR>程序如下:<BR>If Button And 2 ’鼠标右键按下<BR>PopupMenu PopMenu<BR>End If <BR><BR>□ Visual Basic里面的整数和字符串如何互相转换?<BR>VB提供了系统函数Val()和Str(),可以用来实现整数和字符串之间的<BR>转换。例子如下:<BR>Sub Str2Int()<BR>Dim int1 As Integer<BR>Dim str1 As String <BR>int1=100<BR>str1=Str(int1)<BR>Debug.Print str1<BR>str1=“400”<BR>int1=Val(str1)<BR>Debug.Print int1<BR>End Sub<BR><BR>□ 我可以在一个窗体里执行别的窗体的程序代码吗?<BR>是可以的,我们可以用“窗体.代码”的模式去执行别的窗体的代<BR>码。先假设我在窗体frm2里要执行窗体frm1的Form_Click代码,程<BR>序如下:<BR>Private Sub Form_Click()<BR>frm1.Form_Click() ’在frm2里执行frm1的From_Click代码<BR>End Sub<BR><BR>□ 如何在不改变数组内容的情况下重定义数组的范围?<BR>ReDim可以用来重新定义数组的范围,重定义后还要保留数组<BR>的原值,可以用Preserve说明。例如:<BR>Sub ReDim_Data()<BR>Dim tmpdim() as Integer ’定义一个未知范围的数组<BR>ReDim tmpdim(10) ’设定数组的范围0..9<BR>tmpdim(0)=1<BR>tmpdim(1)=2<BR>ReDim Preserve tmpdim(20) ’设定数组的范围0..19,并保留数据<BR>Debug.Print tmpdim(0), tmpdim(1), <BR>End Sub <BR><BR>□ 怎样运行在我的程序里执行别的软件?<BR>系统提供的函数Shell可以解决这个问题。Shell函数的参数为可执<BR>行文件名和运行模式。例如:<BR>Shell“C:\PWIN95\WORDPAD.EXE README.TXT”,1<BR><BR>□ 如何用打印机输出一张图片?<BR>先把图片调入窗体中,然后用PaintPicture方法(Method)把图片打印<BR>出来。<BR>Sub PrintPhoto()<BR>Picture1.Picture = LoadPicture(“C:\ABC\1.BMP”)<BR>Printer.PaintPicture Picture1.Picture, Picture1.Left, Picture1.Top, _<BR>Picture1.Width, Picture1.Height, vbMergeCopy<BR>End Sub<BR><BR>Visual Basic编程问答集(二)<BR>(接上期)<BR>Write X, int1,str1<BR>Close X<BR>SaveData=True<BR>End Function<BR><BR>’读取文件操作<BR>Function ReadData(fname$) As Boolean<BR>On Error Resume Next ’设置错误处理<BR>Dim int1 As Integer<BR>Dim str1 As String<BR>Dim X as Integer<BR><BR>X = FreeFile ’取得一个空闲文件句柄<BR>Open fname$ For Input As X ’试图打开该文件<BR>If Err <> 0 Then ’如果打开不成功<BR>ReadData=False<BR>Exit Function <BR>End If<BR>Input X, int1,str1<BR>Close X<BR>ReadData=True<BR>’输入执行结果<BR>Debug.Print int1,str1<BR>End Function<BR><BR>□ 我想在窗体中按下鼠标右键就弹出一个菜单,怎么做?<BR>首先按下Ctrl+E设计一个菜单PopMenu(具体的菜单设计操作参考<BR>帮助文件),把菜单的Visible设置成False。在Form_MouseUp中编写<BR>程序如下:<BR>If Button And 2 ’鼠标右键按下<BR>PopupMenu PopMenu<BR>End If <BR><BR>□ Visual Basic里面的整数和字符串如何互相转换?<BR>VB提供了系统函数Val()和Str(),可以用来实现整数和字符串之间的<BR>转换。例子如下:<BR>Sub Str2Int()<BR>Dim int1 As Integer<BR>Dim str1 As String <BR>int1=100<BR>str1=Str(int1)<BR>Debug.Print str1<BR>str1=“400”<BR>int1=Val(str1)<BR>Debug.Print int1<BR>End Sub<BR><BR>□ 我可以在一个窗体里执行别的窗体的程序代码吗?<BR>是可以的,我们可以用“窗体.代码”的模式去执行别的窗体的代<BR>码。先假设我在窗体frm2里要执行窗体frm1的Form_Click代码,程<BR>序如下:<BR>Private Sub Form_Click()<BR>frm1.Form_Click() ’在frm2里执行frm1的From_Click代码<BR>End Sub<BR><BR>□ 如何在不改变数组内容的情况下重定义数组的范围?<BR>ReDim可以用来重新定义数组的范围,重定义后还要保留数组<BR>的原值,可以用Preserve说明。例如:<BR>Sub ReDim_Data()<BR>Dim tmpdim() as Integer ’定义一个未知范围的数组<BR>ReDim tmpdim(10) ’设定数组的范围0..9<BR>tmpdim(0)=1<BR>tmpdim(1)=2<BR>ReDim Preserve tmpdim(20) ’设定数组的范围0..19,并保留数据<BR>Debug.Print tmpdim(0), tmpdim(1), <BR>End Sub <BR><BR>□ 怎样运行在我的程序里执行别的软件?<BR>系统提供的函数Shell可以解决这个问题。Shell函数的参数为可执<BR>行文件名和运行模式。例如:<BR>Shell“C:\PWIN95\WORDPAD.EXE README.TXT”,1<BR><BR>□ 如何用打印机输出一张图片?<BR>先把图片调入窗体中,然后用PaintPicture方法(Method)把图片打印<BR>出来。<BR>Sub PrintPhoto()<BR>Picture1.Picture = LoadPicture(“C:\ABC\1.BMP”)<BR>Printer.PaintPicture Picture1.Picture, Picture1.Left, Picture1.Top, _<BR>Picture1.Width, Picture1.Height, vbMergeCopy<BR>End Sub<BR><BR>□ 怎样取得一个字符串在另外一个字符串中出现的次数?<BR>Public Function sCount(String1 As String, String2 As String) As Integer<BR>Dim I As Integer, iCount As Integer<BR>I = 1<BR>Do<BR>If (I > Len(String1)) Then Exit Do<BR>I = InStr(I, String1, String2, vbTextCompare)<BR>If I Then<BR>iCount = iCount + 1<BR>I = I + 2<BR>DoEvents<BR>End If<BR>Loop While I<BR>sCount = iCount<BR>End Function <BR><BR>□ 怎样在一个字符串中删除里面的另外一个字符串?<BR>Public Sub sRemove(String1 As String, String2 As String)<BR>Dim I As Integer<BR>I = 1<BR>Do<BR>If (I > Len(String1)) Then Exit Do<BR>I = InStr(I, String1, String2)<BR>If I Then<BR>String1 = Left$(String1, I - 1) + Mid$(String1, I + Len(String2)+1)<BR>I = I + 2<BR>DoEvents<BR>End If<BR>Loop While I<BR>End Sub<BR><BR>□ 怎样在一个字符串中替换里面的另外一个字符串?<BR>Public Sub sReplace(String1 As String, String2 As String, RepString As String)<BR>Dim I As Integer<BR>I = 1<BR>Do<BR>If (I > Len(String1)) Then Exit Do<BR>I = InStr(I, String1, String2)<BR>If I Then<BR>String1 = Left$(String1, I - 1) + RepString + Mid$(String1, I + Len(String2)+1 )<BR>I = I + 2<BR>DoEvents<BR>End If<BR>Loop While I<BR>End Sub<BR><BR>□ 如何计算一个字符串中的行数?<BR>Function CountStringLine(src_string As String) As Integer<BR>On Error Resume Next<BR>Dim string_flag As Integer<BR>Dim line_cnt As Integer<BR>Dim test_string As String<BR>line_cnt = 0 '初始--> 行数为1<BR>string_flag = 1 '标志为1<BR>test_string = src_string<BR>DoEvents<BR>Do<BR>line_cnt = line_cnt + 1<BR>string_flag = InStr(test_string, vbCrLf) ’判断回车换行<BR>test_string = Right(test_string, Len(test_string) - string_flag - 1)<BR>Loop Until string_flag <= 0<BR>CountStringLine = line_cnt<BR>End Function<BR><BR>□ 如何从一个字符串中读取一行字符?<BR>Function ReadStringLine(src_str As String, lineno As Integer) As String<BR>On Error Resume Next<BR>Dim string_flag As Integer<BR>Dim line_cnt As Integer<BR>Dim test_string As String<BR>Dim ret_string As String<BR>line_cnt = 0 '初始--> 行数为1<BR>string_flag = 1 '标志为1<BR>test_string = Right(src_str, 2)<BR>If test_string <> vbCrLf Then<BR>test_string = src_str + vbCrLf<BR>Else<BR>test_string = src_str<BR>End If<BR>DoEvents<BR>Do<BR>line_cnt = line_cnt + 1<BR>string_flag = InStr(test_string, vbCrLf)<BR>ret_string = Left(test_string, string_flag)<BR>test_string = Right(test_string, Len(test_string) - string_flag - 1)<BR>Loop Until lineno <= line_cnt<BR>'If line_cnt = 1 Then<BR>' ReadStringLine = ret_string<BR>'Else<BR>ReadStringLine = Left(ret_string, Len(ret_string) - 1)<BR>'End If<BR>End Function<BR><BR>----------------------------------------------------------<BR>Visual Basic编程问答集(三)<BR>(接上期)<BR><BR>□ 怎么在VB中实现Delphi那样的MouseEnter和MouseExit的功能?<BR>VB中的鼠标事件驱动只有MouseDown,MouseMove,MouseUp三个事件,没有象<BR>Delphi那样提供MouseEnter(OnEnter)和MouseExit(onExit)的事件。而这两个事件是平时编写程序经常要用到的,我们可以通过调用SetCapture和ReleaseCapture这两个Windows API函数的方法来实现它。具体步骤如下:<BR>1) 在VB中新建一个标准EXE工程;<BR>2) 画出一个按钮Command1;<BR>3) 在窗体Form1中定义Windows API的声明;<BR>Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long) As Long<BR>Private Declare Function ReleaseCapture Lib "user32" () As Long<BR>4) 在Command1的MouseMove事件中编写以下代码:<BR>Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)<BR>Dim MouseEnter As Boolean '鼠标进入的标志位<BR><BR>MouseEnter = (0 <= X) And (X <= Command1.Width) And (0 <= Y) And (Y <= Command1.Height) '计算鼠标的移动是否在Command1里面<BR>If MouseEnter Then '鼠标已经进入<BR>Me.Caption = "Mouse In Button!"<BR>SetCapture Command1.hWnd<BR>Else '鼠标已经离开<BR>Me.Caption = "Mouse Out!"<BR>ReleaseCapture<BR>End If<BR>End Sub<BR><BR> 你倒是蛮热心的,真是辛苦了,谢谢! 挺不错的,对初学者很有帮助。楼主辛苦了! good 只对初学者很有帮助 谢谢 Well done mate! 谢谢楼主。 <b>不错,希望后面还有更多。</b> 很基础的资料,也很实用
页:
[1]
2