程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB6 >> Visual Basic中的界面設計原則和編程技巧

Visual Basic中的界面設計原則和編程技巧

編輯:VB6

在vb裡,mdi(multiple document interface,多窗口程序)窗體是這樣定義的:“mdi窗體作為一個程序的後台窗口,包含著mdichild屬性為true的窗體”。在一個vb程序中,至多只能存在一個mdi父窗體,可以有多個mdi子窗體;建立一個mdi父窗體的方法是在vb的file菜單裡選擇“new mdi form”。

在mdi程序運行時,如果子窗口具有菜單,那麼當子窗口被激活時,子窗口的菜單就會自動替換父窗口菜單;當子窗口被最小化時,在mdi父窗口裡就會出現子窗口的圖標。

windows的通用圖形界面的出現,使計算機用戶不必通過專門的學習就可以得心應手地使用各種windows的軟件;不僅如此,它還是程序設計者在設計windows程序的界面時所必須遵循的標准,這在很大程度上減輕了程序設計者的負擔,使他們能夠把主要精力放在問題的求解和實現上。

visual basic的出現,更加簡化了windows程序界面的設計工作,只需要極少量的代碼,就能實現標准windows應用程序的界面。但是,如果不了解windows程序界面設計的原則,或者不熟悉vb下界面編程的技巧,就難以設計和實現既符合一般標准又具有特色的界面。界面設計的原則界面設計具有一般性的原則,最為重要的有:

1.界面要具有一致性。一致性原則在界面設計中最容易被違反,同時也最容易修改和避免。例如,在菜單和聯機幫助中必須使用相同的術語;對話框必須具有相同的風格。

2.常用操作要有捷徑。常用操作的使用頻度大,應該減少操作序列的長度。例如,為文件的常用操作如打開、存盤、另存等設置快捷鍵。使常用操作具有捷徑,不僅會提高用戶的工作效率,還使得界面在功能實現上簡潔和高效。

3.提供簡單的錯誤處理。系統要有錯誤處理的功能。在出現錯誤時,系統應該能檢測出錯誤,並且提供簡單和容易理解的錯誤處理的功能。錯誤出現後系統的狀態不發生變化,或者系統要提供錯誤恢復的指導。

4.提供信息反饋。對操作人員的重要操作要有信息反饋。對常用操作和簡單操作的反饋可以不作要求,但是對不常用操作和至關重要的操作,系統應該提供信息的反饋。

5.操作可逆。操作應該可逆。這對於不具備專門的知識的操作人員相當有用。可逆的動作可以是單個的操作,或是者一個相對獨立的操作序列。

6.設計良好的聯機幫助。雖然對於熟練用戶來說,聯機幫助並非必不可少,但是對於大多數不熟練用戶來說,聯機幫助具有非常重要的作用。

菜單設計的原則和編程

菜單設計有如下的一般性原則:

1、按照系統的功能來組織菜單。

2、要選用廣而淺的菜單樹,而不是窄而深的菜單樹。

3、根據菜單選項的含義進行分組;並且按一定的規則排序。菜單選項的標題要力求簡短、含義明確,並且最好以關鍵詞開始。

4、常用選項要設置快捷鍵。結合以上的原則,菜單編程有以下幾方面的技術和技巧:

菜單選項的分組

在vb中,菜單選項的分組是通過菜單欄分隔橫線實現的。在菜單的一定位置增加一個caption屬性為“-”的菜單項,它在菜單上就表現為一條橫線。在許多情況下,同一個功能菜單下又可以按照菜單選項的功能分為幾組,這時就可以用分隔橫線來實現菜單項的分組。

常用選項快捷鍵的設置

打開菜單設計窗口(menu design window),應對於每個菜單選項有相應的快捷鍵(shortcut)列表 ,在該表中選擇一個即可。需要注意的是,具有子菜單的菜單或者頂層菜單的快捷鍵不能這樣定義。按照windows的界面設計原則,頂層菜單的快捷鍵的形式是alt+字母鍵。它的實現方法在後文另敘。

對於一些常用的功能菜單項,有約定俗成的快捷鍵。例如,文件打開用ctrl+o,文件存盤用crtl+s,打印用ctrl+p,等等。

為菜單選項定義好快捷鍵之後,菜單上該選項的後面就出現了快捷鍵的文字表示。

菜單選項的使能與禁止、可見與隱藏

為了表示菜單選項的一些特殊功能,可能要用到菜單選項的使能與禁止、可見與隱藏屬性。當因為某種原因使得某個選項所代表的功能不能被實現時,就應該禁止該選項被選中。菜單選項的使能與禁止是通過改變改選項的enabled屬性實現的。

舉例來說,假設菜單選項名為nmuname,則禁止該選項可以如下實現:

mnuname.enabled=false

同理,隱藏一個選項可以用 mnuname.visible=false來實現,而使一個隱藏的選項恢復可見則用 mnuname.visible=true 實現。

菜單項的隱藏與恢復可見常常用在動態菜單的實現中。

菜單項的動態裝入

菜單項的動態裝入是指菜單項的個數不固定,並且能夠在需要時動態地裝入。最簡單的例子就是文件菜單中最近打開的文件的列表。在第一次打開文件之前,該列表是空的,並且不在文件菜單中出現;打開一個文件後,該列表不再是空的,並且文件菜單中出現代表被打開文件的菜單項。

在上面的例子裡,就綜合運用了菜單項的下標屬性(index)、標題屬性(caption)、可見屬性(visible)以及菜單項的裝入方法(loadmethod)。

具體的實現過程如下:

在文件菜單裡增加一個菜單項,標題任意,並假設菜單項的name屬性是opened_files_list;

更改菜單項opened_files_list的可見屬性,使opened_files_list.visible=false

更改菜單項opened_files_list的下標屬性,使opened_files_files_list.index=0

在程序中控制菜單項opened_files_list的動態裝入。

假設要顯示打開過的第二文件的文件名,並且該文件名存放在一個文件名數組opened_file_name裡。以下的代碼就實現了這一功能:

load opened_files_list(1)
opened_files_lise(1).caption="&2"+opened_file_name(1)
opened_files_list(1).visible=true

需要注意的是,對於下標為0的菜單項,不能用load方法。因為在程序執行時,該菜單項就已經被裝入到內存裡了;另外,在菜單項的標題屬性字符裡的“&”字符具有特殊的含義,它的作用是在顯示該屬性字符串的同時,並不顯示“&”本身,而緊跟“&”的字符在顯示時具有下劃線,並且該字符成為熱鍵。

如果下標不為0的菜單項不再需要,為了減少對內存資源的占用,可以用unload方法把它從內存卸出;同樣地,不能用unload卸出下標為0的菜單項。

彈出式菜單的實現(popupmenu method)

vb中在菜單設計窗口(menu design window) 中設計的菜單是下拉式菜單。下拉式菜單是用戶在任何時候都可以在頂端菜單條上選擇後拉出的菜單,而彈出式菜單則是在程序界面的一定區域內點按鼠標鍵後出現的菜單。在某些情況下,彈出式菜單會使系統功能的實現更加簡潔和高效,使用起來更加得心應手。

widnows程序的彈出式菜單一般是當用戶在程序的桌面上點按鼠標鍵時出現的。彈出式菜單多用於實現系統的附加或增強功能。彈出式菜單的內容,可以隨點按鼠標鍵的位置不同而變化。由於彈出的菜單要覆蓋屏幕的一部分,所以應盡量縮短菜單裡的文字。

在vb中,彈出式菜單的實現要用到下拉式菜單設計的技術和popupmenu方法。具體的做法是:

在菜單設計窗口(menu design window)裡設計好相應窗體的彈出式菜單。要注意的是,要彈出的菜單必須至少有一個子菜單;因而這個菜單不能有快捷鍵,並且checked屬性必須是false。再把彈出式菜單的visible屬性改為false。

在具有設計好的彈出式菜單的窗體的form_click中加入以下代碼(假設彈出式菜單的name屬性是mnuexample):

sub form_click()
popupmenu mnuexample
end sub

如果要求只有按下鼠標左鍵或者右鍵才能激活菜單,就必須在form_mousedown裡加入如下代碼:

sub form_mousedown(button as integer,shift as integer,x as single,y as single)
if button=2 then button=2 表 示 鼠 標 右 鍵
popupmenu mnuexample
end if
popupmenu 的 完 整 句 法 是:
[form.]popupmenu menuname[flags[,x[,y]]]

改變flags的值可以控制彈出式菜單的表現形式。flags有兩組值。第一組值用來控制菜單的顯示方式,包括popupmenu_leftalign, popupmenu_centeralign, popupmenu_rightalign, 分別表示以x為左邊界,以x為中心和以x為右邊界的顯示方式,並且以x為左邊界是缺省的方式;另外一組值用來控制菜單項的選中方式,包括popupmenu_leftbutton和popupmenu_rightbutton,分別表示左鍵選中和左/右鍵選中均可,並且左鍵選中是缺省的方式。flags的值由上面的兩組值經過or運算得出。例如,要求左對齊顯示並且左鍵選中為准,則應有:

flags=popupmenu_leftalign or popupmenu_leftbutton

x和y用來定義菜單彈出的位置、缺省是鼠標點中的位置。

菜單項的其他屬性

用alt+字母鍵激活頂層菜單,或者在菜單激活後用字母鍵激活一個菜單項,必須學會使用&。&用在菜單項的標題屬性(caption)裡。它的用法和作用與在用c語言編制的windows程序中的用法和作用相同。

有時希望頂層菜單之間的間隔大一些,或者某個頂層菜單出現在菜單條的最右端,這時就要用到標題屬性是空格的菜單。如果一個菜單的標題是由多個空格組成的,那麼這個菜單在菜單條上就占用跟空格的個數相應的空間,並且它後面的菜單也順序地後移;如果這個菜單的visible屬性是false,那麼它就跟不存在一樣。

窗口設計的原則和舉例

下面是一個浮動窗口技術的例子。為了引起用戶的注意,或者必須保證含有重要信息的窗口不被其他窗口覆蓋,就要用到浮動窗口技術,建立一個“總在最前面”(topmost)的窗口。具體的做法是:

(1)在vb程序中加入如下的聲明:

declare function setwindowpos lib"user"(byval h%,byval hb%,byval x%,byval y%,by
val cx%,byval cy%,byval f%)as integer
global const swp_nomove=2
global const swp_nosize=1
global const hwnd_topmost= 1
global const hwnd_notopmost=2
global const flags=swp_nomove or swp_nosize

(2)假設要把窗體frmexample設置成總在最前面的窗口,只要在frmexample窗體的form_load過程裡加入以下代碼:

dim success%

success=setwindowpos(frmexample.hwnd,hwnd_topmost,0,0,0,0,flags)

如果要取消總在最前面的特性,則可以執行如下的代碼:

success=setwindowpos(frmexample.hwnd,hwnd_notopmost,0,0,0,0,flags)

success不等於0表示setwindowpos執行成功。

在mdi程序裡,有一個窗口是所有其他窗口的父窗口,各個子窗口完成相對獨立的功能,就像是多個獨立的工具組合起來一樣。在這方面,ms word和windows的file manager是最好的例子。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved