2013-06-21 75 views
1

我需要驗證來檢查按下的按鍵是否爲數字。我試着用不同的代碼,但他們不能幫助我。在文本框中,如果用戶按Shift+numbers它顯示特殊字符,如!,@,# ......我需要驗證Shift + key down event在按鍵事件上驗證文本框只接受silverlight中的數字4

//代碼

private void txtNumericTextbox_KeyDown(object sender, KeyEventArgs e) 
      { 
       try 
       { 
        if (e.Key < Key.D0 || e.Key > Key.D9) 
        { 
         if (e.Key < Key.NumPad0 || e.Key > Key.NumPad9) 
         { 
          if (e.Key != Key.Back) 
          { 
           txtNumericTextbox_.BorderBrush = new SolidColorBrush(Colors.Red); 
           lblErrorMessage.Visibility = Visibility.Visible; 
           lblErrorMessage.Text = "Please Enter Numbers Only"; 
          } 
          else 
          { 
           txtNumericTextbox_.BorderBrush = new SolidColorBrush(Colors.DarkGray); 
           lblErrorMessage.Visibility = Visibility.Collapsed; 
           lblErrorMessage.Text = ""; 
          } 
         } 
        } 
       } 
      } 

我怎樣才能做到這一點?

+1

通常當我處理數字輸入時,我只是在'TextChanged'事件上嘗試'Int32.TryParse'或'Double.TryParse'。它使處理負號,小數或其他錯誤的按鍵進行編輯變得簡單(刪除,複製/粘貼,箭頭左/右鍵)然後只顯示「請插入一個數字」的一般錯誤。 –

+0

如果在屬性中使用[ValidationException](http://msdn.microsoft.com/library/system.componentmodel.dataannotations.validationexception(v = vs.95).aspx)綁定到「Textbox.Text」屬性,文本框自動設置紅色邊框和消息。請參見[Silverlight驗證](http://msdn.microsoft.com/zh-cn/library/system.windows.controls.validationsummary(v = vs.95).aspx#exampleToggle)。 – Tonio

回答

0

您可以使用控件上的ModifierKeys屬性來確定是否正在保持Shift鍵。

//代碼

使用此只接受數值。 可以選擇的事件textBox1_KeyDown nonnumberenter = false;

  if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9) 
      { 
       if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9) 
       { 
        if (e.KeyCode != Keys.Back) 
        { 
         nonnumberenter = true; 
         string abc = "Please enter numbers only."; 
         DialogResult result1 = MessageBox.Show(abc.ToString(), "Validate numbers", MessageBoxButtons.OK); 
        } 
       } 
      } 
      if (Control.ModifierKeys == Keys.Shift) 
      { 
       nonnumberenter = true; 
       string abc = "Please enter numbers only."; 
       DialogResult result1 = MessageBox.Show(abc.ToString(), "Validate numbers", MessageBoxButtons.OK); 

      } 

用此僅接受字符。事件你可以選擇textBox1_KeyPress

if (Char.IsNumber(e.KeyChar) || Char.IsSymbol(e.KeyChar) || Char.IsWhiteSpace(e.KeyChar) || Char.IsPunctuation(e.KeyChar)) 
      { 
       MessageBox.Show("Only Char are allowed"); 
       e.Handled = true; 
      } 

希望這會有所幫助。

+0

你能解釋一下這段代碼的含義嗎? –

+0

@Vivek:找到更新的代碼。 – iamCR

0

您可以使用文本框的按鍵事件

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

我一直在尋找同樣的事情:接受數字只。但是,我在_KeyDown事件中沒有找到任何e.KeyCode,所以我調整了庫馬爾的代碼以滿足我的需要,並且與您分享,如果它更適合您: 使用e.Handled = true取消該字符的輸入。

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     switch (e.Key) 
     { 
      case Key.NumPad0: 
      case Key.NumPad1: 
      case Key.NumPad2: 
      case Key.NumPad3: 
      case Key.NumPad4: 
      case Key.NumPad5: 
      case Key.NumPad6: 
      case Key.NumPad7: 
      case Key.NumPad8: 
      case Key.NumPad9: 
      case Key.D0: 
      case Key.D1: 
      case Key.D2: 
      case Key.D3: 
      case Key.D4: 
      case Key.D5: 
      case Key.D6: 
      case Key.D7: 
      case Key.D8: 
      case Key.D9: 
       break; 
      default: 
       e.Handled = true; 
       break; 
     } 
    } 
相關問題