问题集锦及编程技巧论文Word格式文档下载.docx
- 文档编号:18906665
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:107
- 大小:68.65KB
问题集锦及编程技巧论文Word格式文档下载.docx
《问题集锦及编程技巧论文Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《问题集锦及编程技巧论文Word格式文档下载.docx(107页珍藏版)》请在冰豆网上搜索。
&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-下载)、leadtools(下载)等等。
六、“实时错误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。
十四、问题:
如何编程使文本框中文本的某一特定字符或字符串同时高亮显示?
由于普通textbox控件不支持不连续字符串的同时高亮显示,所以我们选择richtextbox控件。
单击工程(project)选单项,在弹出的下拉选单中单击组件(components)选单项,从弹出的对话框中选择microsoftrichtextboxcontrol5.0复选框,确定加载richtextbox控件。
新建(new)一个工程,在窗体(form)上添加一个richtextbox控件和两个command(按钮)控件,都采用系统默认的name属性值;
设置richtextbox的text属性值为空,command1和command2的caption属性值分别设为“输入文本”和“选择字符串”。
最后,添加如下vb代码:
privatesubcommand1—click()
dimstrasstring
dimtextasstring
str=″输入文本″
text=inputbox(str)
richtextbox1.text=text
privatesubcommand2—click()
dimstrasstring
dimtextasstring
dimpositionasinteger
dimlenthasinteger
str=″输入要高亮显示的字符串″
text=inputbox(str)
iftext〈〉″″then
position=instr(richtextbox1.text,text)-1
lenth=len(text)
richtextbox1.selstart=position
richtextbox1.sellength=lenth
richtextbox1.selcolor=rgb(255,0,0)
dowhileinstr(position+lenth+1,richtextbox1.text,text)〈〉0
position=instr(position+lenth+1,richtextbox1.text,text)-1
richtextbox1.sellength=lenth
loop
endif
按f5执行程序,单击“输入文本”按钮,在弹出的对话框中输入一些文本,确定后,刚刚输入的文本将显示在richtextbox中;
再单击“选择字符串”按钮,在弹出的对话框中输入你希望高亮显示的字符串,确定后,richtextbox中相应的字符串将以红色高亮显示。
十五、问题:
如何利用vb编写程序实现windows95操作系统的热启动?
要利用程序实现系统的重新启动,可以在你的程序中调用api函数来实现。
建一个子函数:
(以vb为例)
declarefunctionsystemparametersinfolib″user32″alias—
″systemparametersinfo″(byvaluactionaslong,byvaluparamaslong,
byvallpvparamasany,byvalfuwininiaslong)aslong
subdisablectrlaltdelete(bdisabledasboolean)
dimxaslong
x=systemparametersinfo(97,bdisabled,cstr
(1),0)
calldisablectrlaltdelete(true)′禁止热启
calldisablectrlaltdelete(false)′允许热启
十六、问题:
如何把数据文件输出到text控件中?
如果数据量比较大,窗体满屏也不够大,怎么解决?
有一个比较简单的方法,就是把数据放到一个文本框(text)里,并在其中加上水平和垂直滚动条。
具体实现步骤为:
先在窗体(form)里加入一个文本框,采用默认名text1;
然后,设置文本框text1的属性:
text属性设置为空,multiline属性设置为true,scrollbars属性设置为3-both;
接着添加如下vb代码:
privatesubform—load()
dimhandleasinteger
dimfilenameasstring
onerrorgotoerrexit
begin:
′输入要显示的数据文件的名称
filename=inputbox$(″inputfilename″, ″openfile″)
onerrorgotofileerr
handle=freefile
openfilenameforinputas#handle
′把数据文件中的数据输出到文本框中
text1.text=input$(lof(handle),handle)
close#handle
exitsub
fileerr:
dimerrnumasinteger
iferr.number=53then
errnum=msgbox(″filenotexist″,vbokcancel,″errorinformation″)
iferrnum=1then
gotobegin
else
exitsub
endif
endif
msgboxerr.description,,″fileopenfailed″
errexit:
′使文本框充满整个窗体
privatesubform—resize()
text1.left=0
text1.top=0
text1.width=form1.width-100
text1.height=form1.height-400
通过这样的处理,不仅能解决问题,而且用户还可以在文本框中对数据进行编辑。
十七、问题:
怎样把文件列表框、目录列表框和驱动器列表框相互关联起来?
想做一个对话窗体,包含驱动器列表框、目录列表框和文件列表框,并能实现三者的同步操作,怎么做?
在实际应用中,经常会遇到上述问题,在vb中解决这个问题非常简单,可以通过path属性的改变引发change事件来实现。
例如:
subdir1—change()
file1.path=dir1.path
该事件过程使窗体上的目录列表框dir1和文件列表框file1产生同步。
因为目录列表框path属性的改变将产生change事件,所以在dir1—change事件过程中,把dir1.path赋给file1.path,就可以产生同步效果。
类似地,增加下面的事件过程,就可以使三种列表框同步操作:
subdrive1—change()
dir1.path=drive1.drive
该过程使驱动器列表框和目录列表框同步,前面的过程使目录列表框和文件列表框同步,从而使三种列表框同步,问题即可解决。
十八、问题:
如何在windows95或windows98启动后自动启动程序?
我们都知道在windows95和windows98的“开始”→“程序”选单下有一“启动”选单项,当每次启动windows95或windows98时,系统都会自动启动放在“启动”选单栏里的可执行程序。
但目前有好多软件,像解霸五、icq,以及大部分实时侦测病毒的软件等等,安装后,并没有放在“启动”选单里,也能在启动操作系统时自动启动。
怎么实现的呢?
其实只要知道windows注册表的一些知识,这个问题就不能称之为问题了。
用鼠标单击“开始”,打开开始选单,再单击“运行”,出现一对话框,然后输入“regedit”,确定后,会打开系统注册表编辑器,找到hkey—local—machine?
software?
microsoft?
windows?
currentversion?
run,加入你的程序的入口,就可以了。
如果不知道怎么加,就参考一下已经存在的键值。
十九、问题:
如何用vb在窗体上点鼠标右键产生一个弹出式选单(popupmenu)?
大家都知道,在windows95的桌面和许多流行软件的视窗中,当我们点鼠标右键时,会在鼠标的当前位置弹出一个快捷选单。
许多爱好编程的朋友是不是也希望能在自己的程序里有类似的功能呢?
其实,这并不困难。
笔者经过一番努力,在vb下找出一个通用的方法,供大家分享。
要实现上述功能,需分两个步骤:
(1)利用vb的选单编辑器(menueditor)编辑你希望弹出的选单及子选单,注意,要将选单的visible属性设置为:
false。
(2)在窗体(form1)的mousedown事件中编写程序,来激发编辑好的选单,假设选单名为popmenu,程序源码如下:
privatesubform—mousedown(buttonasinteger,shiftasinteger,xassingle,yassingle)
ifbutton=vbrightbuttonthen
popmenu.visible=true
popupmenupopmenu
上述方法是针对窗体的,我们也可以针对任意控件,用鼠标右键点击控件时,也弹出一个快捷选单。
方法也很简单,只要把上述代码放到相应控件的mousedown事件中,就可以了。
二十、问题:
怎样动态在窗体上判断某区域内是否有控件存在?
最近编一小程序,想在窗体的某个区域输出数据,这就要求在这个区域内不能有其他控件存在,那么,怎么才能知道在窗体的某个区域内,是否有控件存在呢?
为了判断在窗体的某个区域中,是否含有控件,我们可以利用以下vb程序来实现:
functiongetcontrol(x1assingle,y1assingle,x2assingle,y2assingle)ascontrol
dimcontrolascontrol
foreachcontrolinform1
withcontrol
if(x1〈=.left)and(x2〉=.left)and_
(y1〈=.top)and(y2〉=.top)or_
(x1〈=.left+width)and(x2〉=.left+width)and_
(y1〈=.top)and(y2〉=.top)or_
(x1〈=.left)and(x2〉=left)and_
(y1〈=.top+height)and(y2〉=.top+height)or_
(x1〈=.left+width)and(x2〉=.left+width)and_
(y1〈=.top+height)and(y2〉=.top+height)then
setgetcontrol=control
exitfunction
endifendwith
next
setgetcontrol=nothing
endfunction
注:
(x1,y1)和(x2,y2)分别为选定矩形区域的左上角和右下角点的坐标值。
该程序通过计算窗体上所有控件的四个角的位置来判断控件是否与选定区域相交,并返回相交的控件。
---------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 问题 集锦 编程 技巧 论文