2017-08-02 181 views
2

我希望用戶只能在TextBox中寫入數字(0-9)。 我使用以下代碼來防止用戶編寫除數字之外的字母和其他字符,但我無法避免用戶使用TextBox中的空間。WPF TextBox no允許空間

private void CheckIsNumeric(TextCompositionEventArgs e) 
{ 
    int result; 

    if (!(int.TryParse(e.Text, out result))) 
    { 
     e.Handled = true; 
     MessageBox.Show("!!!no content!!!", "Error", 
         MessageBoxButton.OK, MessageBoxImage.Exclamation); 
    } 
} 

我媒體鏈接使用類似

if (Keyboard.IsKeyDown(Key.Space)) 
{ //...} 

試過,但沒有成功。

感謝您的幫助。

+0

我試過了,它也允許空間。 – Morris

+0

對重複問題地址中接受的答案發表評論並支持該問題:「[Space]不會觸發PreviewTextInput事件」。你從哪個事件中調用你的'CheckIsNumeric'方法? – dlatikay

+1

對不起,我一定忽略了這一點。 我正在使用PreviewTextInput事件,這將是問題。 我繞過了textbox.Text.Replace(「」,「」)的問題。所以現在所有的空間都被刪除了,對我來說什麼都好。 – Morris

回答

0

在檢查之前檢查空格是否分開,或只是更正空格。因此,用戶可以儘可能多地進行空間分配,而且不會改變任何內容。

private void CheckIsNumeric(TextCompositionEventArgs e) 
{ 
    int result; 
    string removedSpaces = e.Text.Replace(" ",""); 
    if (!(int.TryParse(removedSpaces, out result))) 
    { 
     e.Handled = true; 
     MessageBox.Show("!!!no content!!!", "Error", 
         MessageBoxButton.OK, MessageBoxImage.Exclamation); 
    } 
} 
+0

感謝您的回答,但這不會改變任何內容。據我所知,PreviewTextInput事件不會對空間做出反應,所以我需要一個完全不同的方法。 – Morris

0

爲您的文本框註冊KeyPress事件 並添加此代碼。

private void textBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')) 
    { 
     e.Handled = true; 
    } 

    // If you want to allow decimal numeric value in you textBox then add this too 
    if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)) 
    { 
     e.Handled = true; 
    } 
}