2009-05-21 59 views

回答

6

檢查文本框的keydown事件,做作爲

  // If escape is presses, then close the window. 
      if(Key.Escape == e.Key) 
      { 
       this.Close(); 
      } 
      // Allow alphanumeric and space. 
      if(e.Key >= Key.D0 && e.Key <= Key.D9 || 
       e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9 || 
       e.Key >= Key.A && e.Key <= Key.Z || 
       e.Key == Key.Space) 
      { 
       e.Handled = false; 
      } 
      else 
      { 
       e.Handled = true; 
      } 

      // If tab is presses, then the focus must go to the 
      // next control. 
      if(e.Key == Key.Tab) 
      { 
       e.Handled = false; 
      } 

希望這將幫助......

+0

BTW,處理程序的簽名是: 私人無效OnKeyDownHandler(對象發件人,發送KeyEventArgs E) – Jeff 2013-10-31 20:11:01

0

KeyDown事件處理程序可能不是最好的地方,因爲該字符已經被添加到TextBox中。您可以響應PreviewKeyDown事件並阻止該事件繼續,但這可能會導致未知結果。

一種方法是將ValidationRule附加到TextBox。雖然這不會阻止用戶輸入角色,但會通知他們他們不被允許。要做到這一點,你從System.Windows.Controls.ValidationRule推導得到的東西是這樣的:

public class MyValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     // Logic to determine if the TextBox contains a valid string goes here 
     // Maybe a reg ex that only matches alphanumerics and spaces 
     if(isValidText) 
     { 
      return ValidationResult.ValidResult; 
     } 
     else 
     { 
      return new ValidationResult(false, "You should only enter an alphanumeric character or space"); 
     } 
    } 
} 

,然後用它在XAML這樣的:

<TextBox> 
    <TextBox.Text> 
     <Binding Path="MyString" 
       UpdateSourceTrigger="PropertyChanged"> 
      <Binding.ValidationRules> 
       <myns:MyValidationRule /> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

每次用戶輸入無效字符他們會得到錯誤信息。希望這有一些用處。

0

您還可以使用文本框的PreviewTextInput事件。

<TextBox Name="txtName" PreviewTextInput="txtName_PreviewTextInput"/> 

並添加代碼下面的背後:

private void txtName_PreviewTextInput(object sender, TextCompositionEventArgs e) 
    { 
     foreach (char c in e.Text) 
     { 
      if (!char.IsLetterOrDigit(c)) 
      { 
       e.Handled = true; 
       break; 
      } 
     } 
    } 
0

我DONOT認爲這是一個很好的做法是使用的KeyDown。 退步是你將不得不處理Backspace,刪除和標籤鍵也。

相反: 手柄PreviewTextInput

private void OnPreviewTextInput(object sender, TextCompositionEventArgs e) 
    { 
     if (!IsMatch(e.Text)) e.Handled = true; 
    } 

    private bool IsMatch(string input) 
    { 
     return Regex.IsMatch(input, MyRegexString); 
    } 

則必須照顧PasteHandler的: 添加下面的構造線。

DataObject.AddPastingHandler(TargetTextBoxName, PasteHandler); 

    private void PasteHandler(object sender, DataObjectPastingEventArgs e) 
     { 
      if (!e.DataObject.GetDataPresent(typeof(string))) return; 
      // Allow pasting only numeric 
      var pasteText = e.DataObject.GetData(typeof(string)) as string; 
      if (!IsMatch(pasteText)) 
      { 
       e.CancelCommand(); 
      } 
     } 
+0

你的正則表達式將是 「^ [A-ZA-Z0-9]」 – kkk 2015-12-03 17:39:24

相關問題