2009-09-21 62 views
2

我經常需要有模式對話框編輯屬性或應用程序的配置設置,但我從來沒有真正高興有關如何驗證這些,並給出了驗證結果給用戶。驗證模態對話框字段的最佳方法?

選擇和工具通常是: -

  1. 設計的用戶界面,使無效的選擇 是根本不可能的 - 即使用 「面具編輯」,範圍限制在 旋編輯,

  2. 嘗試和捕獲錯誤,因爲他們是 發現 - 即時對話或 反饋,當用戶有地方輸入了無效 值(儘管 因爲這可能是由於一個 不完整的條目,這可能是 視覺分心)

  3. 當按下OK 檢測上的 控制焦點更改錯誤

  4. 驗證整個對話,以及當前消息 箱(ES),顯示出了什麼問題。

No.4通常是最簡單和最快速的代碼,但我從來沒有真正滿意它。

你有沒有發現什麼好方法來處理呢?

雖然這個問題是很普通的,一個理想的答案是很容易實現的德爾福爲Win32 ...

+2

與驗證問題沒有直接關係。幾乎所有的項目中都使用模態對話框。很多功能都是常見的,所以製作一個自定義對話框是非常有意義的,我的模態對話框都是從這個對話框繼承而來的。除了一致性之外,當我匆忙時,它還使我避免採取「捷徑」並將快速和骯髒的對話拼湊在一起。 – 2009-09-21 13:00:26

回答

1

我認爲N°4是做驗證的最好辦法,除了是最簡單的&最快的代碼,你必須在同一個地方所有的驗證邏輯,所以如果你需要連接到數據庫,比較2+的投入,等等一切都做一次,

雖然:

ñ °1:這可能是實現用於一些情況下&更新一個惡夢 N°2/3:你必須認識到與驗證,輸入的變化,重點所有UI事件,... - >重編碼&難以調試

4

與一切,它依賴。 :)我試圖從用戶的角度來看這些。

編號1.我不喜歡個人面具編輯,但是對旋轉編輯,預先填充的組合框等的範圍限制,對於一般的理智檢查很有意義,並且使用戶的生活更輕鬆。

我認爲2號可以使使用對話框痛苦用戶。他們可能不會進入你認爲他們會順序的信息,或可能會留下一個不完整的場,回來就在年底。

爲了驗證,我用3和4

視場(例如所需的值)的組合,我可以證實它的每個按鍵和禁用OK按鈕,如果它是無效的。你可能會喜歡它,改變不好的領域的顏色或使用其他種類的可見的驗證控件。這對用戶來說很明顯,並不會打斷他們的「流動」。

當用戶點擊「確定」時,不容易檢查的事情(例如對服務器的調用)只會執行一次。

1

JVCL提供了用於驗證輸入的組件集(TJvValidators等)。它標記沒有有效輸入的字段,並在用戶將鼠標移動到該標記上時向用戶顯示提示。 (我想我在dotNET上閱讀過類似的功能,但我從來沒有用過它。)

雖然我喜歡這個概念,並且實際上在一些對話框中使用了這些組件,但我不太喜歡它的實現:對CPU的使用率很高,並且JVCL附帶的預定義驗證器並不真正有用。當然,擁有訪問JVCL svn庫,我可以停止抱怨,並開始提高組件...

0

IMO,選項#1應該作爲理所當然的事情來做,而不是可選的,並且儘可能地簡化界面,但仍然允許用戶輸入所需的細節應用程序。不過,我不喜歡使用蒙版編輯。例如,如果我想要用戶輸入一個數字,我只需使用一個文本框,然後在保存字段值時嘗試解析數字。

對於直接驗證,我只使用#4,除非有特殊情況需要使用其他方法之一。如果用戶改變主意,我喜歡讓用戶修改他們的輸入內容,這樣他們就可以犯錯誤並返回並自行修復,因爲他們已經知道他們的輸入存在錯誤。如果可能的話,我會幫助他們(例如,如果表單域爲空或無效,並且他們點擊確定,我會在顯示錯誤消息後重點/選擇違規字段)。

在Windows窗體應用程序中執行#2操作很少自行完成,所以我完全避免將它作爲驗證的主要手段。但是,它可以與#4有效地結合在一起,但我認爲在大多數情況下,這太過於誇張。

2

只是一個觀察,但我看過很多用戶填充對話框(特別是複雜的),他們不使用TAB鍵。他們傾向於點擊/編輯組合單選按鈕,因爲他們「思考」答案或從不同文檔中讀取。這個順序不會和你想象的一樣!我們作爲程序員希望合乎邏輯(船長,Spock說),但用戶很好...

一種很好的方式(但需要努力)是讓每個編輯器驗證自己,無論是在更改或退出,它只是如果無效則更改顏色。然後,在「OK按鈕」代碼中執行的例程就可以簡單地遍歷控制列表,並將焦點設置爲第一個報告自己爲「無效」的焦點,直到沒有任何操作爲止。

我爲航空業工作,重點是信用卡的東西,我有TTicketNumberEdit,TCardNumberEdit,TExpiryDateEdit,TFormOfPaymentEdit等運作良好,因爲在其中一些驗證並不簡單。如前所述,您需要儘早付出努力,但它在複雜的對話中付出了代價。

相關問題