2011-12-24 2 views
1

Я смотрел повсюду, но мне кажется, что примеры, которые я видел позволяют только цифры 0-9Числовой только TextBox

Я пишу программу, теорема Пифагора. Я хочу, чтобы телефон (Windows Phone 7) установил, есть ли в текстовом поле ANY alpha (A-Z, a-z), символы (@,%) или что-либо иное, кроме числа. Если нет, то он продолжит вычислять. Я хочу проверить, чтобы ошибок в будущем не было.

Это в основном плохо псевдокод, что я хочу, чтобы это сделать

txtOne -> любой альфа - Нет -> любые символы - Нет -> продолжить ...

Я бы предпочел команду проверить, является ли строка полностью номером.

Заранее благодарен!

+0

Это лучше, чтобы проверить, если все символы в строке являются числами, а не если они являются одним из множества, не являющихся числами. – Marlon

+0

Как об использовании одного из методов TryParse в ваших данных TextBox. [Int32.TryParse] (http://msdn.microsoft.com/en-us/library/f02979c7%28v=VS.95%29.aspx) или [Decimal.TryParse] (http://msdn.microsoft.com). /en-us/library/9zbda557.aspx) в зависимости от типа данных. –

ответ

4

Есть несколько способов сделать это:

  1. Вы можете использовать TryParse() и проверить, если возвращаемое значение не является ложным.

  2. Вы можете использовать Regex для проверки:

    Match match = Regex.Match(textBox.Text, @"^\d+$"); 
    if (match.Success) { ... } 
    // or 
    if (Regex.IsMatch(textBox.Text, @"^\d+$")) { ... } 
    
2

Или вы можете просто только дать им цифровую клавиатуру. Существует несколько различных раскладок клавиатуры, которые вы можете использовать. Link

Если вы хотите сделать больше indepth, я использовал события KeyDown и KeyUp, чтобы проверить, что было введено и обрабатывать нажатие клавиши. Link

+0

Не обрабатывает копирование –

+0

И устройства могут иметь физическую клавиатуру. –

9

Еще лучший способ гарантировать, что ваше текстовое поле является числом, является обращение к событию KeyPress. Затем вы можете выбрать, какие символы вы хотите разрешить. В следующем примере мы запретить все символы, не являющиеся цифры:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    // If the character is not a digit, don't let it show up in the textbox. 
    if (!char.IsDigit(e.KeyChar)) 
     e.Handled = true; 
} 

Это гарантирует, что текст текстового поля является числом, потому что это только позволяет цифра должна быть введена.


Это то, что я только что придумал, чтобы десятичные значения (и, видимо, ключ забой):

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (char.IsDigit(e.KeyChar)) 
    { 
     return; 
    } 
    if (e.KeyChar == (char)Keys.Back) 
    { 
     return; 
    } 
    if (e.KeyChar == '.' && !textBox1.Text.Contains('.')) 
    { 
     return; 
    } 
    e.Handled = true; 
} 
+2

Обычно вам нужно обрабатывать вставку из буфера обмена, но я не знаю, если это проблема на Windows Phone 7. – arx

+1

@arx вы делаете, хорошо. Вам также потребуется обработать TextChanged. –

0
/// <summary> 
/// A numeric-only textbox. 
/// </summary> 
public class NumericOnlyTextBox : TextBox 
{ 
    #region Properties 

    #region AllowDecimals 

    /// <summary> 
    /// Gets or sets a value indicating whether [allow decimals]. 
    /// </summary> 
    /// <value> 
    /// <c>true</c> if [allow decimals]; otherwise, <c>false</c>. 
    /// </value> 
    public bool AllowDecimals 
    { 
     get { return (bool)GetValue(AllowDecimalsProperty); } 
     set { SetValue(AllowDecimalsProperty, value); } 
    } 

    /// <summary> 
    /// The allow decimals property 
    /// </summary> 
    public static readonly DependencyProperty AllowDecimalsProperty = 
     DependencyProperty.Register("AllowDecimals", typeof(bool), 
     typeof(NumericOnlyTextBox), new UIPropertyMetadata(false)); 

    #endregion 

    #region MaxValue 

    /// <summary> 
    /// Gets or sets the max value. 
    /// </summary> 
    /// <value> 
    /// The max value. 
    /// </value> 
    public double? MaxValue 
    { 
     get { return (double?)GetValue(MaxValueProperty); } 
     set { SetValue(MaxValueProperty, value); } 
    } 

    /// <summary> 
    /// The max value property 
    /// </summary> 
    public static readonly DependencyProperty MaxValueProperty = 
     DependencyProperty.Register("MaxValue", typeof(double?), 
     typeof(NumericOnlyTextBox), new UIPropertyMetadata(null)); 

    #endregion 

    #region MinValue 

    /// <summary> 
    /// Gets or sets the min value. 
    /// </summary> 
    /// <value> 
    /// The min value. 
    /// </value> 
    public double? MinValue 
    { 
     get { return (double?)GetValue(MinValueProperty); } 
     set { SetValue(MinValueProperty, value); } 
    } 

    /// <summary> 
    /// The min value property 
    /// </summary> 
    public static readonly DependencyProperty MinValueProperty = 
     DependencyProperty.Register("MinValue", typeof(double?), 
     typeof(NumericOnlyTextBox), new UIPropertyMetadata(null)); 

    #endregion 

    #endregion 

    #region Contructors 

    /// <summary> 
    /// Initializes a new instance of the <see cref="NumericOnlyTextBox" /> class. 
    /// </summary> 
    public NumericOnlyTextBox() 
    { 
     this.PreviewTextInput += OnPreviewTextInput;   
    } 

    #endregion 

    #region Methods 

    /// <summary> 
    /// Numeric-Only text field. 
    /// </summary> 
    /// <param name="text">The text.</param> 
    /// <returns></returns> 
    public bool NumericOnlyCheck(string text) 
    { 
     // regex that matches disallowed text 
     var regex = (AllowDecimals) ? new Regex("[^0-9.]+") : new Regex("[^0-9]+"); 
     return !regex.IsMatch(text); 
    } 

    #endregion 

    #region Events 

    /// <summary> 
    /// Called when [preview text input]. 
    /// </summary> 
    /// <param name="sender">The sender.</param> 
    /// <param name="e">The <see cref="TextCompositionEventArgs" /> instance 
    /// containing the event data.</param> 
    /// <exception cref="System.NotImplementedException"></exception> 
    private void OnPreviewTextInput(object sender, TextCompositionEventArgs e) 
    { 
     // Check number 
     if (this.NumericOnlyCheck(e.Text)) 
     { 
      // Evaluate min value 
      if (MinValue != null && Convert.ToDouble(this.Text + e.Text) < MinValue) 
      { 
       this.Text = MinValue.ToString(); 
       this.SelectionStart = this.Text.Length; 
       e.Handled = true; 
      } 

      // Evaluate max value 
      if (MaxValue != null && Convert.ToDouble(this.Text + e.Text) > MaxValue) 
      { 
       this.Text = MaxValue.ToString(); 
       this.SelectionStart = this.Text.Length; 
       e.Handled = true; 
      } 
     } 

     else 
     { 
      e.Handled = true; 
     } 
    } 

    #endregion 
} 
1

Вы можете определить входной объем текстового поля в.

Пример:

<TextBox InputScope="Digits"></TextBox> 
Смежные вопросы