VB新手常见问题解答
2006-02-27 11:47:17 来源:WEB开发网核心提示:SP2、SP3、企业版有何区别问请问VB中的SP2、SP3、企业版这三种,各代表什么含义?答SP是ServicePack的缩写,VB新手常见问题解答,微软每推出一个软件后,都会不定期地推出一些补丁程序,但你必须对Pubid字段建立索引,如果想使用FindFirst方法,依时间先后称为SP1、SP2等等,后一个SP版本包
SP2、SP3、企业版有何区别
问请问VB中的SP2、SP3、企业版这三种,各代表什么含义?
答SP是ServicePack的缩写。微软每推出一个软件后,都会不定期地推出一些补丁程序,依时间先后称为SP1、SP2等等。后一个SP版本包括前一个版本的全部内容,所以如果你安装了SP3就用不着安装SP2了。SP可以从微软的站点免费下载。VB5.0的SP下载地址:http://msdn.microsoft.com/vstudio/sp/vs97/。VB6.0的SP下载地址:http://msdn.microsoft.com/vstudio/sp/default.asp。在ServicePack的Readme文件中介绍了该ServicePack修改了哪些错误。VB有三个主要版本:学习版、专业版、企业版。企业版是功能最全的版本,当然也是最贵的版本。
API的意义是什么
问编程中经常碰到API。请问API的意义是什么?如何知道编程中经常用到的窗口句柄、窗口类名等?
答API是applicationPRogrammingInterface(应用编程接口)的缩写,也就是应用程序调用系统功能的接口。WindowsAPI主要包括由Windows系统定义的函数、消息及与之相关的数据类型。我们使用各种开发工具归根结底都是和API打交道。但是API本身比较难掌握,所以VisualBasic提供了可视的面向对象的控件,使初学者即使不太了解API,也可以编写Windows程序。但是VisualBasic提供的控件毕竟是有限的,不可能包括API的所有方面,所以一些复杂的功能仍然需要调用API来实现。
API定义中的&H是什么含义
问现在我看到一些用API函数做的例程,其中有一个语句:PUBLICCONSTLVM_FIRST=&H1000,该语句中&H1000代表的是什么含义?
答&H是16进制的表示,比如&H10等于十进制的16。
为何总提示“变量未定义”
问下面是一个关闭Windows的小程序:
OptionExplicit
PrivateDeclareFunctionExitWindowsExLib“user32”(ByValuFlagsAsLong,ByValdwReservedAsLong)AsLong
PrivateSubForm_Load()
ExitWindowsExEWX_FORCEOrEWX_LOGOFFOrEWX_SHUTDOWN,0
EndSub
但编译的时候,总是提示:EWX_FORCE变量未定义,但EWX_FORCE是一个参数。这是为何?
答EWX_FORCE和其他几个参数都是WindowsAPI中定义的常数。你使用了OptionExplicit(这是个好习惯,便于发现错误),所以VB发现未定义的符号都会进行提示,这有助于发现拼写错误和遗漏参数定义。你应该从VB的Win32api.txt中复制这几个参数的定义。
如何保存图片
问我在VB的主窗体要装入一幅事先选好的图片,程序运行后我可以在图片上进行修改并保存它,以备以后调用。请问怎样办?
答你可以把Form或PictureBox的AutoDraw属性设为True,进行修改后使用VB的SavePicture语句进行存盘。如:
SavePicturePicture1.Picture,“c:\test.bmp”
这种存盘的文件为.bmp文件,颜色数与当前屏幕的色彩数相同。如果你的存盘要求很高,希望控制存盘格式,只能借助于其他控件,比如ImageMan(http://www.data-tech.com下载)、LeadTools(http://www.leadtools.com下载)等等。
“实时错误9下标越界”错误
问我在为一数组赋值时出现如下错误:“实时错误9——下标越界”。出错的代码如下:
Diminputdata()AsSingle
inputdata(0)=Text2(0).Text/Text2(1).Text注释:入学率
请问为何会出现这种错误?
答VB在使用数组前必须指定数组的大小。一种办法是在定义时确定大小,如:DimInputData(10)AsSingle,另一种是采用动态数组。对于你的程序,数组声明部分可以不用修改,而在出错语句前加一句:ReDimInputData(10)AsSingle。
如何打开光盘上的数据库
问我在编一个VB程序,当程序刻到光盘以后,不能使用,经过检查发现是因为.mdb文件为只读,程序出错:“该数据库文件已经被另外的一个用户以独占的方式打开,您不能访问”。请问各位高手怎么办?可是我用access却可以阅读该数据库(只读)。
答如果你用Data控件使用该数据库,将Data控件的ReadOnly属性设为True,将Exclusive属性设为True。如果ReadOnly属性为False,则就出现你所见到错误信息。如果不将Exclusive属性设为True,将出现Can注释:tlockfile的错误信息。如果你是使用OpenRecordset语句打开数据库,Exclusive属性对应着dbDenyWrite和dbDenyRead参数。
怎样避免当前窗口被关闭
问在按下右上角的关闭键后,怎样避免当前窗口被关闭?
答在按下关闭键后,会发生Form_Unload和Form_QueryUnload事件。这两个事件都有个Cancel参数,如果在事件处理过程中将其设为True就可以避免窗口被关闭。对于你的问题,Form_QueryUnload事件可能更好些,因为它有一个UnloadMode参数可以区分关闭窗口的指令是用户做出的,还是系统做出的,或者是本程序代码产生的。
DLL的编程格式问题
问我是第一次编写ActiveXDLL程序,在DLL中,我只在类模块中写了一个函数CARD,编译成DLL后,在另外一个程序中调用,在模块中声明:
PublicDeclareFunctioncard_configLib"c:\test\card.dll"(ByValaddressAsInteger,ByValintermitAsInteger)
在一个按钮中写如下代码:
c=card_config(12,12)
运行后出现错误:编译ActivexDLL后,调用时出现错误:“实时错误453,找不到DLL入口点”望指教。如有可能:请详细告之DLL的编程格式。
答Declare语句只能用来调用标准DLL,而不能用于调用ActiveXDLL,这是你程序出错的原因。VB无法生成标准DLL,只能生成ActiveXDLL。要调用ActiveXDLL,一般通过CreateObject语句调用,或在集成环境中选择菜单“工程/引用”,在对话框中选择你要调用的ActiveXDLL。这样你就可以在程序中使用ActiveXDLL中定义的对象或函数。
怎样启动其他应用程序
问怎样在VB中启动其他Windows应用程序,例如记事本?
答你可以使用VB的Shell函数调用其他应用程序。如:
Shell“Notepad.exec:\autoexec.bat”
如何打印MSChart
问如何打印MSChart控件中的内容?
答MSChart本身没有打印功能,所以必须先用EditCopy将图像放在剪贴板中,然后再打印,如:
MSChart1.EditCopy
Printer.Print″″
Printer.PaintPictureClipboard.GetData(),0,0
Printer.EndDoc
“can′tfinddllentrypoint”是指什么
问出现以下错误信息是什么意思?“run-timeerror注释:453注释:can注释:tfinddllentrypointopenprocessinkernel32”,(我有一个定义PrivateDeclareFunctionopenprocessLib“kernel32"(ByValdwdesireaccessAsLong,ByValbInherithandleAsLong,ByValdwprocessIdAsLong)AsLong)
答把openprocess改为OpenProcess。因为在Win32下,DLL中的函数名是区分大小写的。在kernel32中只有OpenProcess函数,没有openprocess函数。
“对象不支持该属性或方法”错误
问为什么执行Data1.Recordset.FindFirst“PubID=”&DBCombo1.BoundText时出现“对象不支持该属性或方法”错误?
答这是因为FindFirst、FindNext、FindLast等方法不支持Table类的记录集,但可以使用Seek方法进行查找工作。但你必须对Pubid字段建立索引。如果想使用FindFirst方法,请修改Data1的RecordsetType属性为Dynaset。->
问请问VB中的SP2、SP3、企业版这三种,各代表什么含义?
答SP是ServicePack的缩写。微软每推出一个软件后,都会不定期地推出一些补丁程序,依时间先后称为SP1、SP2等等。后一个SP版本包括前一个版本的全部内容,所以如果你安装了SP3就用不着安装SP2了。SP可以从微软的站点免费下载。VB5.0的SP下载地址:http://msdn.microsoft.com/vstudio/sp/vs97/。VB6.0的SP下载地址:http://msdn.microsoft.com/vstudio/sp/default.asp。在ServicePack的Readme文件中介绍了该ServicePack修改了哪些错误。VB有三个主要版本:学习版、专业版、企业版。企业版是功能最全的版本,当然也是最贵的版本。
API的意义是什么
问编程中经常碰到API。请问API的意义是什么?如何知道编程中经常用到的窗口句柄、窗口类名等?
答API是applicationPRogrammingInterface(应用编程接口)的缩写,也就是应用程序调用系统功能的接口。WindowsAPI主要包括由Windows系统定义的函数、消息及与之相关的数据类型。我们使用各种开发工具归根结底都是和API打交道。但是API本身比较难掌握,所以VisualBasic提供了可视的面向对象的控件,使初学者即使不太了解API,也可以编写Windows程序。但是VisualBasic提供的控件毕竟是有限的,不可能包括API的所有方面,所以一些复杂的功能仍然需要调用API来实现。
API定义中的&H是什么含义
问现在我看到一些用API函数做的例程,其中有一个语句:PUBLICCONSTLVM_FIRST=&H1000,该语句中&H1000代表的是什么含义?
答&H是16进制的表示,比如&H10等于十进制的16。
为何总提示“变量未定义”
问下面是一个关闭Windows的小程序:
OptionExplicit
PrivateDeclareFunctionExitWindowsExLib“user32”(ByValuFlagsAsLong,ByValdwReservedAsLong)AsLong
PrivateSubForm_Load()
ExitWindowsExEWX_FORCEOrEWX_LOGOFFOrEWX_SHUTDOWN,0
EndSub
但编译的时候,总是提示:EWX_FORCE变量未定义,但EWX_FORCE是一个参数。这是为何?
答EWX_FORCE和其他几个参数都是WindowsAPI中定义的常数。你使用了OptionExplicit(这是个好习惯,便于发现错误),所以VB发现未定义的符号都会进行提示,这有助于发现拼写错误和遗漏参数定义。你应该从VB的Win32api.txt中复制这几个参数的定义。
如何保存图片
问我在VB的主窗体要装入一幅事先选好的图片,程序运行后我可以在图片上进行修改并保存它,以备以后调用。请问怎样办?
答你可以把Form或PictureBox的AutoDraw属性设为True,进行修改后使用VB的SavePicture语句进行存盘。如:
SavePicturePicture1.Picture,“c:\test.bmp”
这种存盘的文件为.bmp文件,颜色数与当前屏幕的色彩数相同。如果你的存盘要求很高,希望控制存盘格式,只能借助于其他控件,比如ImageMan(http://www.data-tech.com下载)、LeadTools(http://www.leadtools.com下载)等等。
“实时错误9下标越界”错误
问我在为一数组赋值时出现如下错误:“实时错误9——下标越界”。出错的代码如下:
Diminputdata()AsSingle
inputdata(0)=Text2(0).Text/Text2(1).Text注释:入学率
请问为何会出现这种错误?
答VB在使用数组前必须指定数组的大小。一种办法是在定义时确定大小,如:DimInputData(10)AsSingle,另一种是采用动态数组。对于你的程序,数组声明部分可以不用修改,而在出错语句前加一句:ReDimInputData(10)AsSingle。
如何打开光盘上的数据库
问我在编一个VB程序,当程序刻到光盘以后,不能使用,经过检查发现是因为.mdb文件为只读,程序出错:“该数据库文件已经被另外的一个用户以独占的方式打开,您不能访问”。请问各位高手怎么办?可是我用access却可以阅读该数据库(只读)。
答如果你用Data控件使用该数据库,将Data控件的ReadOnly属性设为True,将Exclusive属性设为True。如果ReadOnly属性为False,则就出现你所见到错误信息。如果不将Exclusive属性设为True,将出现Can注释:tlockfile的错误信息。如果你是使用OpenRecordset语句打开数据库,Exclusive属性对应着dbDenyWrite和dbDenyRead参数。
怎样避免当前窗口被关闭
问在按下右上角的关闭键后,怎样避免当前窗口被关闭?
答在按下关闭键后,会发生Form_Unload和Form_QueryUnload事件。这两个事件都有个Cancel参数,如果在事件处理过程中将其设为True就可以避免窗口被关闭。对于你的问题,Form_QueryUnload事件可能更好些,因为它有一个UnloadMode参数可以区分关闭窗口的指令是用户做出的,还是系统做出的,或者是本程序代码产生的。
DLL的编程格式问题
问我是第一次编写ActiveXDLL程序,在DLL中,我只在类模块中写了一个函数CARD,编译成DLL后,在另外一个程序中调用,在模块中声明:
PublicDeclareFunctioncard_configLib"c:\test\card.dll"(ByValaddressAsInteger,ByValintermitAsInteger)
在一个按钮中写如下代码:
c=card_config(12,12)
运行后出现错误:编译ActivexDLL后,调用时出现错误:“实时错误453,找不到DLL入口点”望指教。如有可能:请详细告之DLL的编程格式。
答Declare语句只能用来调用标准DLL,而不能用于调用ActiveXDLL,这是你程序出错的原因。VB无法生成标准DLL,只能生成ActiveXDLL。要调用ActiveXDLL,一般通过CreateObject语句调用,或在集成环境中选择菜单“工程/引用”,在对话框中选择你要调用的ActiveXDLL。这样你就可以在程序中使用ActiveXDLL中定义的对象或函数。
怎样启动其他应用程序
问怎样在VB中启动其他Windows应用程序,例如记事本?
答你可以使用VB的Shell函数调用其他应用程序。如:
Shell“Notepad.exec:\autoexec.bat”
如何打印MSChart
问如何打印MSChart控件中的内容?
答MSChart本身没有打印功能,所以必须先用EditCopy将图像放在剪贴板中,然后再打印,如:
MSChart1.EditCopy
Printer.Print″″
Printer.PaintPictureClipboard.GetData(),0,0
Printer.EndDoc
“can′tfinddllentrypoint”是指什么
问出现以下错误信息是什么意思?“run-timeerror注释:453注释:can注释:tfinddllentrypointopenprocessinkernel32”,(我有一个定义PrivateDeclareFunctionopenprocessLib“kernel32"(ByValdwdesireaccessAsLong,ByValbInherithandleAsLong,ByValdwprocessIdAsLong)AsLong)
答把openprocess改为OpenProcess。因为在Win32下,DLL中的函数名是区分大小写的。在kernel32中只有OpenProcess函数,没有openprocess函数。
“对象不支持该属性或方法”错误
问为什么执行Data1.Recordset.FindFirst“PubID=”&DBCombo1.BoundText时出现“对象不支持该属性或方法”错误?
答这是因为FindFirst、FindNext、FindLast等方法不支持Table类的记录集,但可以使用Seek方法进行查找工作。但你必须对Pubid字段建立索引。如果想使用FindFirst方法,请修改Data1的RecordsetType属性为Dynaset。->
更多精彩
赞助商链接