[英]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..1
和4.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.