簡體   English   中英

使用小數C#的WPF篩選器文本框輸入

[英]WPF Filter Textbox Input with Decimals C#

我已經使用以下代碼成功濾除了數字以外的任何內容。 我已經利用PreviewTextInput事件來捕獲當前輸入:

private void NumericValidation(object sender, TextCompositionEventArgs e)
{
    e.Handled = !_numericValidator.IsMatch(e.Text);
}

_numericValidator定義為_numericValidator = new Regex("^[0-9]+$");

這段代碼工作得很好,只允許在文本框中輸入0-9。

但是,我希望允許使用一個小數,以便輸入可以更精確。 我已經在RegexBuddy中測試了以下正則表達式,並且可以正常運行,但是我可以在文本框中輸入無效的數字,例如1..14.3.5

^(?!\.{2,})(?:\d+)?(?:\.{0,1})?(?:\d+)?$

關於下一步應該嘗試的任何建議?

我在下面提出的示例允許用戶在WPF App中輸入所有正數。

  • 如果第一個字符是. ,它將自動更改為0.如果第一個字符為0 ,第二個字符為其他數字,則會自動在它們之間加點。

在XAML中:

<TextBox Width="100" x:Name="tb" TextChanged="Tb_OnTextChanged" FontSize="20" Margin="15,15,15,15"/>

在代碼中:

private void Tb_OnTextChanged(object sender, TextChangedEventArgs e) {
      var tbx = e.OriginalSource as TextBox;
      string dd = tbx ? .Text;
      if (tbx == null || string.IsNullOrEmpty(dd)) return;
      var tt = dd.Select(r = > r.ToString()).ToList();
      var myregex = ".1234567890".Select(r = > r.ToString()).ToList();
      var ss = new List < string > ();
      tt.ForEach(o = > {
          if (ss.Contains(".") && o != "." || !ss.Contains(".")) {
              if (myregex.Contains(o))
                  ss.Add(o);
              if (ss.FirstOrDefault() == ".") {
                  ss[0] = "0";
                  ss.Add(".");
              }
              if (ss.Count == 2 && ss.FirstOrDefault() == "0" && o != ".") {
                  ss[1] = ".";
                  ss.Add(o);
              }
          }
      });
      var sbc = new StringBuilder();
      ss.ForEach(u = > sbc.Append(u));
      tb.Text = sbc.ToString();
      tb.CaretIndex = tb.Text.Length;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM