亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

VisualBasic軟件設計中的幾個問題

2019-11-18 17:44:12
字體:
來源:轉載
供稿:網友
在軟件開發過程中,有一些看似很簡單的問題,卻很容易被一般的開發人員所忽略,這些“Bugs”的存在,影響我們軟件走向商品化。下面所列出的是筆者在使用VisualBasic開發軟件時,碰到了幾個這類問題,這里給出其解決方法,供大家探討交流。

一防止應用程序加載兩份
當我們的應用程序在Windows下運行后,在操作過程中,有時會把它最小化隱藏起來,或者切換到程序管理器下進行其它操作,而后又想進入原來的應用程序,這時如果忘記了剛才啟動的應用程序,又去重新啟動該應用程序,在內存中就同時加載了兩份同樣的應用程序,這樣不但占用了內存空間,而且容易引起誤操作,造成數據的損失。為了避免這種情況發生,就需要程序能夠給出提示“已經加載過”或直接進入第一次被加載的應用程序中。對于這個問題,看起來比較難辦,其實我們只要對Windows管理應用程序的機理有所了解,就很容易解決。
我們知道,對于每一個運行著的應用程序,Windows都分配給一個唯一的“句柄(Handle)”和一個模塊代碼(Module)。當同時運行兩份相同的程序時,兩份程序的模塊代碼都相同,因此,只要找到內存中兩個相同的模塊代碼,我們就知道有兩份程序在運行,從而可以控制它。Windows提供的兩個接口函數GetModuleHandle和GetModuleUsage可以完成此任務。具體方法如下,首先在一個新的模塊文件(*.Bas)中聲明API函數。

DeclareFunctionGetModuleHandleLib"Kernel"(ByVallpPRogName$)

DeclareFunctionGetModuleUsageLib"Kernel"(ByValhModule)

同時建立一個子過程,名字為main,子過程中的代碼如下:

SubMain()
OnErrorGoToerrMain‘錯誤處理
DimhModule‘模塊句柄
DimAppCount‘應用程序的個數
appPath$=app.Path "/"‘應用程序的啟動路徑
hModule=GetModuleHandle(appPath$ app.EXEName ".exe")‘獲得該程序的句柄。
AppCount=GetModuleUsage(hModule)‘獲得模塊代碼,即運行的應用程序數目。
lfAppCount>1Then‘同一應用程序數大于1
MsgBox"程序已經加載",64
End‘結束當前啟動的應用程序
Elsc
mainForm.Show‘mainForm是程序的主窗體
Endlf
ExitSub
errMain:
lfErr<>0Then
MsgBox"啟動程序時發生錯誤",64
ExitSub
Endlf
EndSub
該過程完成后,在VB3.0主菜單[options]下,選擇[Project]菜單項,設定[StartupFrom]項為Submain,即程序運行時,最先從Submain子程序開始。這樣保證上面的代碼一定被執行。Submain是VB3.0約定的子過程名,不能用其它的名字來代替。
重新生成EXE文件,在程序管理器下,啟動該應用程序,然后把產生的窗體最小化,接著從程序管理器下再運行它,用戶將看到一個消息框,告訴用戶,應用程序已被加載過了,第二份程序終止執行。上面的程序僅用來防止加載二份程序,但還沒有做到當不能啟動第二份時,自動進入到第一份程序。要做到這一點,所涉及的程序較復雜,這里就不詳細介紹了。

二判斷Windows的安裝路徑
在我們開發的軟件中,有時會直接調用Windows提供的小應用程序,如計算器、計事本等;或需要把一些特殊的文件放到Windows或SYSTEM的路徑下。通常,Windows都安裝在C:\WINDOWS目錄下,但用戶可以任意修改Windows的主目錄名,因此,在我們的軟件中,就需要判斷Windows的安裝路徑。對于這個問題,Windows提供了兩個API函數:GetWindowsDirectory和GetSystemDirectory,可以返回Windows目錄和SYSTEM目錄的名稱。
為此,編制一個通用函數GetWinDir,它返回Windows的安裝目錄名稱。類似,可以寫出GetSysDir,略。

在*.BAS模塊文件中聲明API函數

DeclareFunctionGetWindowsDirectoryLib"Kernel"(ByValipBufferAsString,ByValnSizeAsInteger)asIntegerFunctionGetWinDir()AsStringDimWindir$Windir$=Space$(144)‘144是WINDOWS目錄名稱理論上的最大長度。

lfGetWindowsDirectory(Windir$,144)=0Then
MsgBox"不能確定WINDOWS的安裝路徑",16
GetWinDir=""
Else
Windir$=ALLTrim$(Windir$)
ifRight$(Windir$,1)<>“/”thenWindir$=Windir$ “/”
‘加上反斜杠
GetWinDir=Windir$
Endlf
EndFunction
其中ALLTRIM是用來去掉字符串中空字符的函數
FunctionALLTrim(FatStr$)AsString
'thisFunctiondeleteSpacecharinstringofFatStr$
DimSlimStr$,I
SlimStr$=FatStr$
I=lnStr(SlimStr$,Chr$(0))‘空格的位置
IfIThenSlimStr$=Left$(SlimStr$,I-1)
SlimStr$=Ltrim$(Rtrim$)(SlimStr$))
AIITrim$=SlimStr$
EndFunction
三在關掉窗體前提示保存數據
一般說來,通常用5種方式可以關閉一個應用程序:
1.用戶選擇了當前窗體ControlBox中的[關閉]命令
2.激發程序中的結束命令代碼(如End,Unload)
3.退出Windows
4.在Windows的任務列表中關閉應用程序。
5.多文檔操作時,關閉主MDI窗體,引起子MDI窗體關閉。
在關閉一個應用程序前,我們要給用戶一個機會,提示“是否保存數據”,或者取消“關閉”的操作。在VB中,窗體的關閉引發的是Form_Unload事件,我們可以對該事件進行編程,來控制“關閉”操作。假設現已有一個過程FileSave用來保存文件,則可以這樣來編寫程序。
SubForm_Unload(CancelAslnteger)
selectcastMsagbox(“是否保存數據?”,3 32)
‘Yes,No,Cnacel三種選擇
case6‘YES
FileSave‘保存數據
case2‘cancel
Cancel=TRUE‘取消關閉操作
caseelse‘NO‘不保存,執行關閉操作
Endselect
EndSub
上面代碼中的Cancel變量,是Form_unload事件本身的固有傳出變量,它給Windows控制過程傳遞消息,從而控制程序的走向。

上面三個例子,只是軟件完善過程中的一些小問題,要使軟件穩定可靠,需要做大量細致認真的工作。有些問題,我們可以通過發掘VB本身的潛力,深入掌握一些過程的操作技巧來解決;而有些較復雜的問題,涉及到Windows底層方面的操作,采用Windows的API函數,可以很容易實現。當然這需要對Windows的函數和機理有一定的了解。隨著Windows編程水平的提高,我們會逐漸學會并喜歡利用API函數來輔助完成程序編碼。->


上一篇:VB編程問與答

下一篇:VB編程的一些心得

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美中文字幕在线播放| 亚洲国产精品视频在线观看| 日韩专区中文字幕| 亚洲欧美成人一区二区在线电影| 久久久久久久一区二区| 成人免费自拍视频| 国产精品99久久久久久久久久久久| 欧美一级淫片videoshd| 久久成人国产精品| 久久影视电视剧免费网站清宫辞电视| 国内精品模特av私拍在线观看| 久热在线中文字幕色999舞| 国产男女猛烈无遮挡91| 黑人巨大精品欧美一区二区三区| 精品亚洲精品福利线在观看| 日韩美女av在线| 国产精品极品美女在线观看免费| 2019中文在线观看| 97人洗澡人人免费公开视频碰碰碰| 国产精品入口尤物| 日韩美女激情视频| 日韩中文字幕在线免费观看| 国产精品一区专区欧美日韩| 久久久国产精品一区| 91精品在线观| 91在线中文字幕| 欧美巨大黑人极品精男| 色系列之999| 久久精品中文字幕一区| 97香蕉超级碰碰久久免费的优势| 欧美日韩一区二区在线| 久久香蕉国产线看观看av| 97香蕉超级碰碰久久免费软件| 狠狠色噜噜狠狠狠狠97| 国产精品久久久久7777婷婷| 日韩大陆毛片av| 狠狠做深爱婷婷久久综合一区| 日韩免费观看网站| 久久久91精品国产| 精品国产拍在线观看| 日本久久精品视频| 欧美日韩在线一区| 91av在线播放| 久久久成人av| 高清一区二区三区四区五区| 日本韩国欧美精品大片卡二| 成人在线免费观看视视频| 性色av一区二区三区| 国产欧美日韩精品在线观看| 亚洲视频日韩精品| 日韩精品亚洲元码| 亚洲视频在线观看| 亚洲一区二区三区乱码aⅴ| 午夜精品理论片| 国产精品∨欧美精品v日韩精品| 国产91色在线| 成人精品久久一区二区三区| 97在线精品国自产拍中文| 国产日韩欧美黄色| 欧美亚洲视频一区二区| 久久九九全国免费精品观看| 欧美精品aaa| 亚洲福利小视频| 69久久夜色精品国产7777| 亚洲精品中文字幕女同| 国产女人精品视频| 奇门遁甲1982国语版免费观看高清| 亚洲精品福利在线观看| 在线观看亚洲视频| 国产成人精品在线播放| 久久香蕉精品香蕉| 日本精品一区二区三区在线播放视频| 国产日韩精品综合网站| 亚洲一区av在线播放| 在线观看欧美成人| 久久久久日韩精品久久久男男| 欧美精品久久久久久久久| 91中文在线视频| 国产精品久久久久久久7电影| 欧美—级a级欧美特级ar全黄| 一区二区三区日韩在线| 伊人精品在线观看| 日韩免费看的电影电视剧大全| 欧美日韩亚洲精品内裤| 亚洲国产精品久久久久秋霞蜜臀| 午夜精品久久久久久久久久久久久| 久久色在线播放| 日本精品久久中文字幕佐佐木| 成人午夜在线视频一区| 国产精品久久久| 色综合导航网站| 欧美超级免费视 在线| 久久久成人的性感天堂| 亚洲一级免费视频| 国产精品久久一区主播| 国产香蕉精品视频一区二区三区| 精品动漫一区二区| 欧美一区二区.| 97在线视频免费| 中文字幕综合一区| 亚洲精品天天看| 国产精品黄色av| 97超级碰在线看视频免费在线看| 亚洲欧美日韩另类| 欧美国产视频日韩| 亚洲人成毛片在线播放| 亚洲r级在线观看| 国产美女主播一区| 91久久精品国产91久久| 久久视频在线观看免费| 国产精品毛片a∨一区二区三区|国| 亚洲最大的免费| 欧美制服第一页| 91系列在线播放| 久久偷看各类女兵18女厕嘘嘘| 亚洲女人天堂成人av在线| 久久久视频精品| 亚洲最大福利视频| 亚洲无av在线中文字幕| 国产精品黄色影片导航在线观看| 欧美在线一级va免费观看| 一本色道久久88亚洲综合88| 国产精品高潮粉嫩av| 97在线看免费观看视频在线观看| 亚洲欧美日韩精品久久| 另类图片亚洲另类| 亚洲精品日韩激情在线电影| 国a精品视频大全| 久久久亚洲天堂| 国产区精品视频| 精品中文字幕在线2019| 国产精品久久国产精品99gif| 亚洲成色777777女色窝| 日日狠狠久久偷偷四色综合免费| 国产一区二区久久精品| 亚洲精品久久视频| …久久精品99久久香蕉国产| 欧美片一区二区三区| 久久综合五月天| 亚洲大胆人体视频| 久久久噜久噜久久综合| 亚洲欧美自拍一区| 日韩av电影国产| 欧美日韩国产在线播放| 国产精品自产拍在线观看中文| 日韩中文字幕国产精品| 亚洲天堂av在线播放| 色悠悠国产精品| 日韩电影中文字幕av| 欧美剧在线观看| 欧美在线视频a| 成人国产精品久久久久久亚洲| 色先锋资源久久综合5566| 中日韩午夜理伦电影免费| 亚洲天堂av电影| www国产亚洲精品久久网站| 日韩电影在线观看永久视频免费网站| 亚洲最大福利网站| 久久99精品国产99久久6尤物| 亚洲精品wwww| 色婷婷av一区二区三区久久| 亚洲欧美另类在线观看| 在线看欧美日韩| 福利视频导航一区|