提高雙打的對話方塊資料驗證

2022-02-12 15:25:30 字數 1385 閱讀 1934

最初我把它寫成乙個實用程式類,用來在使用者點選ok按鈕時檢查資料。但是,現有專案中的許多檢查都是在dodataexchange中完成的。因此,一段時間後,我意識到用改進後的**替換dodataexchange中現有的驗證呼叫會很好,但方式很簡單。這就是我如何想出ddv_rangedouble的。 ddv_rangedouble對(ddx_text和ddx_minmaxdouble)在乙個呼叫中替換ddx_text和ddx_minmaxdouble。但這並不是唯一的區別。它的主要優點是它不是乙個簡單的最小值。值& lt;最大比較可以指定檢查值的間隔範圍。該區間與代數區間表示式相同,並以字串的形式給出。例如,如果指定乙個間隔"[0,90)",將執行以下檢查:0<=value<90。寫'inf'或'-inf'來指定乙個無界區間的正無窮或負無窮。例如:"[0.0,inf)"將只測試值是否也大於或等於0.0,因為interval是指定為字串的,你可以把變數的名字放在相同的字串中,在interval部分之前(例如:「角[0,90)」)。這個名稱將在乙個類似於上圖的錯誤訊息中顯示。最後的區別是,如果控制項不可見或禁用,則不會執行驗證,也不會顯示錯誤訊息。這樣做的原因是,當關聯變數在某種狀態下與資料輸入無關時,通常需要隱藏或禁用編輯控制項。然而,mfc的ddv_函式仍然驗證這些值並顯示錯誤,這可能會使使用者感到困惑。您還可以使用ddx_rangedouble代替ddx_text,而無需進行任何驗證,方法是省略函式的最後乙個引數(間隔範圍)。它將完全像ddx_text一樣工作,只是如果編輯控制項不可見或禁用,它不會為編輯控制項中的非數字值顯示錯誤訊息。 要在對話方塊中使用這個,在對話方塊實現類的頂部包含標頭檔案,並用ddx_rangedouble替換所有相關的ddx_text呼叫。刪除ddx_minmaxdouble後面的ddx_minmaxdouble,並將值範圍作為字串放入ddx_rangedouble呼叫中。隱藏,複製code

#include "dvalidatevalue.h" // header for dialog data validation

...void cdlg_mydemo::dodataexchange(cdataexchange* pdx)

}afx_data_map

ddv_rangedouble(pdx, idc_edit_unit_wt, m_unitwt,

"unit weight (0.0,inf)");

}

重要的 確保沒有將ddv_rangedouble放到afx_data_map作用域內。將它放在外部,如示例所示,否則類嚮導將無法解析**。 記住要用ddv_rangedouble呼叫替換後面的ddx_text和ddx_minmaxdouble。 最後,儘管我編寫這段**是為了處理雙精度數(我在字段中處理的大多是實數),但為整數新增類似的功能非常容易。最簡單的方法是用乙個帶整型引數的函式包裝ddv_rangedouble。但是,您還需要檢查編輯控制項中的數字是否為實際的整數。 本文**於:

對話方塊之間傳送資料

在 oninitdialog 中處理傳入引數,lparam 就是傳入的引數 通過 dialogboxparam 來傳入引數,在對話方塊中的 oninitdialog 的 lparam lparam 來取引數。long 型別,指標就是 long 了。傳遞字串 傳送 接受 傳遞結構體 傳送 接收 由於傳...

mfc父對話方塊調出子對話方塊顯示資料的問題

2008 11 24 21 40 父對話方塊調出子對話方塊後,子對話方塊中定義了乙個cedit型別的變數,對cedit賦值後顯示不出來,希望高手指點一下。void cmy2008dlg onpaihang 這樣行不行,好像update不能用在cedit裡面吧?分享到 2008 11 24 22 00...

QT之登入對話方塊驗證碼

有時候在登入介面需要驗證碼功能,這樣能夠防止被惡意程式攻擊,驗證碼必須動態隨機產生,並且有一定的識別難度。解決方案 1.隨機產生驗證碼 2.在驗證碼區域繪製雜訊 3.驗證碼顏色隨機變化 4.繼承已有qlabel控制項進行重繪 隨機產生驗證碼 for int i 0 i letter number i...