2008-09-17 24 views
0

有誰知道爲什麼微軟不提供其.NET框架的數字文本框,例如一個文本框,可以確保輸入的字符總是一個有效的數字?這是通常在不同風格的應用程序中使用的東西,實際上大多數GUI庫(以及我所知道的)都以某種方式提供。雖然它不是很難寫你自己的,它也不是微不足道的。.NET NumericTextBox

所以,我感興趣的是找出是否有人能理順這一遺漏。

編輯:感謝您的建議。雖然蒙版文本框和數字上下文都有它們的位置;我對看起來像文本框的控件感興趣,但是在按鍵時會自動執行驗證,以確保輸入對應於有效的數字。在我的(被認爲是有限的)經驗中,這是用得相當多的東西(我們並不總是希望靜態限制由被掩蓋的文本框強加,就像我們並不總是希望側面的上下控件一樣) 。

在網上有很多不同程度的質量的實現,甚至在MSDN甚至有這樣的例子。

edit2:謝謝你們,所以它聽起來像是數字上下是僅用於數字輸入的.NET控件(以及我們實際上沒有顯式數字文本框控件的原因)。如果它自動禁止輸入非數字字符(在按鍵上,粘貼等),但是我認爲當控件失去焦點時它會執行驗證就好了。而且,如果有人真的熱衷於進行粘貼驗證,則可以進行粘貼驗證...

回答

4

我第二使用的NumericUpDown的加里Shutlers建議。你可能不喜歡上下-控制,但在Windows中輸入數字控制的標準看,你應該三思而後使用不同的外觀。

如果您最終編寫自己的實現(或在網上找到一個實現),那麼需要注意一些缺陷。請記住,除了按鍵之外,還有很多方法可以讓某個值進入控件。 MSDN上的鏈接中的一個甚至不會覆蓋粘貼,因此您可以輕鬆地在控件中將非數字字符串ctrl-V。

3

NumericUpDown控件專門用於輸入數字,可以像TextBox一樣使用。

4

你可以使用一個MaskedTextBox

+0

創建此控件的一個實例並將其Mask屬性設置爲'http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.mask.aspx' – Gishu 2008-09-17 08:33:09

3

用的WinForms 2.0開始,你有一個MaskedTextBox中。您可以將掩碼設置爲任何您想要的值,即對於數字使用掩碼全0。

0

還可以,得到TextBox類並抓住鍵盤事件,並確保沒有其他比數字被寫入。

如果它是一個網頁,使用Javascript也會對HTML文本框做同樣的處理。

0

微軟把它給第三方填寫關於在工具箱中缺少控制的空白。我想象時間和成本將以他們的理由爲特徵。

但是,在這種情況下,我認爲FilteredTextBox提供了您描述的功能。

1

某些.NET Framework控件奇怪地不公開它們包裝的基礎Windows控件的所有功能。在這種情況下,由於某種原因ES_NUMBER風格尚未實施。

您可能可以處理HandleCreated事件(或覆蓋OnHandleCreated,因爲TextBox未密封),並調用SetWindowLong在基礎Edit控件上設置ES_NUMBER樣式。在WinUser.h中將ES_NUMBER定義爲0x2000。

0

基於第二編輯:

Windows Forms FAQ告訴您如何限制問題26.12在文本字符:

26.12我怎樣才能限制我的文本框可以接受的人物?

您可以處理文本框的KeyPress事件,如果傳入的字符不可接受,請將events參數標記爲顯示字符已處理。下面是一個派生的TextBox,它只接受數字(和控制字符,例如backspace,...)。即使片段使用派生文本框,也不是必需的,因爲只需將處理程序添加到其父窗體。

請參閱代碼示例的常見問題解答。

相關問題