WPF C# Pobieranie danych liczbowych

W programowaniu część dziesiętną w liczbach ułamkowych oddziela się za pomocą kropki. W przypadku projektu wpf, operator ten może być automatyczie zmieniony na przecinek w zależności od kraju i ustawień windowsa. W wielu przypadkach warto użyć argumentu CultureInfo, aby te zmiany nie wypływały na sposób wpisywaia danych. Dodatkowo warto zamieniać przecinki na kropki, aby użytkownik miał możliwość stosowania obu operatorów.

      string numInput = "2";
      if(double.TryParse(numInput.Replace(',', '.'), CultureInfo.InvariantCulture, out double number)){
          return number;
      }

Ograniczenie wpisywanych danych do textbox

//xaml
<TextBox PreviewTextInput="TextBox_OnPreviewTextInput"/>

//xaml.cs
private void TextBox_OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
    var textBox = sender as TextBox;
    // Use SelectionStart property to find the caret position.
    // Insert the previewed text into the existing text in the textbox.
    var fullText = textBox.Text.Insert(textBox.SelectionStart, e.Text);

    double val;
    // If parsing is successful, set Handled to false
    e.Handled = !double.TryParse(fullText,
                                 NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign,
                                 CultureInfo.InvariantCulture,
                                 out val);
}

Filtrowanie danych za pomocą Regex

// xaml
<TextBox Name="NumberTextBox" PreviewTextInput="NumberValidationTextBox"/>

//xaml.cs
// use  [^a-zA-Z] for alphabet only
  private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
  {
      Regex regex = new Regex("[^0-9],");
      e.Handled = regex.IsMatch(e.Text);
  }

Scroll to Top