明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

用Visual Basic設(shè)計(jì)更好的用戶界面

[摘要]有時(shí)在一個(gè)窗口中出現(xiàn)較多的控制件時(shí),如果能向?qū)降亟ㄗh用戶下一步該做什么,不失為上策。 在Visual Basic的程序設(shè)計(jì)中,我們可以使用語句:Object.SetFaocus使我們希望的控件得到輸入焦點(diǎn),舉個(gè)例子:在Form1中我們加入一個(gè)按鈕Command1和一個(gè)文本輸入Text1,雙擊按鈕...
有時(shí)在一個(gè)窗口中出現(xiàn)較多的控制件時(shí),如果能向?qū)降亟ㄗh用戶下一步該做什么,不失為上策。

在Visual Basic的程序設(shè)計(jì)中,我們可以使用語句:Object.SetFaocus使我們希望的控件得到輸入焦點(diǎn),舉個(gè)例子:在Form1中我們加入一個(gè)按鈕Command1和一個(gè)文本輸入Text1,雙擊按鈕控件,然后鍵入如下代碼:

Text1.SetFocus

再按F5運(yùn)行程序,您就會(huì)看到一單擊按鈕,文本框會(huì)立即取得輸入焦點(diǎn)。另外,我們還可以使用語句:Sendkeys "{TAB}"使下一個(gè)控件獲得焦點(diǎn),但我們需要在設(shè)計(jì)時(shí)確定各控件的Index值。(在Properties窗口中)讓控件自己感知自己的工作已完成,而主動(dòng)將焦點(diǎn)讓出,會(huì)使用戶覺得應(yīng)用程序很聰明,也減少了用戶出錯(cuò)的機(jī)會(huì)。

可是當(dāng)焦點(diǎn)切換的兩個(gè)控件相隔有一定距離時(shí),上述的方法有時(shí)也不足以引起用戶的注意,那么一種好的解決方法是將鼠標(biāo)箭頭也移到控件上?上,VB并不支持鼠標(biāo)移動(dòng),那我們就求助API函數(shù),API函數(shù)SetCursorPos可讓我們?nèi)缭浮?

下面是子程序MoveCursorOn,它可讓鼠標(biāo)移動(dòng)到指定控件上方。

下列代碼請(qǐng)放在declarations段中:
 
Type PoinTAPI

x As Integer

y As Integer

End Type

Declare Sub SetCursorPos Lib "User"(Byval x As Integer,Byval y As Integer)

Declare Sub ClientToScreen Lib "User"(Byval hwnd As Integer,IpPoint As PointAPI)

Declare Function GetParent Lib "User"(Byval hwnd As Integer)As Integer

然后建立一個(gè)新的子程序(ALT+N→N→鍵入子程序名MoveCursorOn),下面是子程序的代碼:

Sub MoveCursorOn(source As Control)

Dim Pt As PoinTAPI

Dim hparent As Integer

p.x=(Source.Left+Source.Width/2)/Screen.Twipsperpixel)

p.y=(Source.Top+Source.Height/2)/Screen.Twipsperpixel)

hparent=GetParent(source.hwnd)

ClientToScreen hparent pt

SetCursorPos pt.x pt.y

End Sub

使用該子程序很容易,例如我們想把鼠標(biāo)移動(dòng)到按鈕Command1上,就可使用語句

Move Cursor On Command1

您會(huì)看到鼠標(biāo)箭頭已經(jīng)指著按鈕Command1。

需要說明的是,千萬不要濫用該子程序。讓鼠標(biāo)自己滿屏亂飛,我們的用戶會(huì)感到失去對(duì)應(yīng)用程序的控制,這是違反我們的初衷的。

在有數(shù)個(gè)輸入框的窗口中(這在數(shù)據(jù)庫(kù)應(yīng)用程序中是很典型的),當(dāng)用戶完成第一個(gè)輸入框的輸入后,總愛習(xí)慣性的加一個(gè)回車,希望輸入焦點(diǎn)落到下一個(gè)輸入框中(DOS中大多數(shù)應(yīng)用程序是如此),可往往事與愿違,這一回車卻觸發(fā)了擁有Default特性的按鈕,結(jié)果不是關(guān)閉了當(dāng)前窗口就是又蹦出另一窗口。用戶睜大眼睛看著屏幕,“咦?!我到底做了什么?”這是Windows新用戶經(jīng)常遇到的事情。

解決它其實(shí)很容易,只需在輸入框的KeyPress事件中加入如下代碼:

IF KeyASCII=13 Then

KeyASCII=0

Sendkeys "{TAB}"

END IF

這樣,當(dāng)用戶在這個(gè)輸入框中鍵入Enter時(shí),就象鍵入TAB鍵時(shí),焦點(diǎn)被移到下一控件上。但需注意,這種方法不適用于多行的TextBox,即TextBox的MultiLine特性設(shè)為True時(shí),因?yàn)檫@時(shí)的回車鍵是起換行的作用。