限制从类输入到文本框中的字母字符
本文关键字:字符 文本 输入 | 更新日期: 2023-09-27 18:05:58
我有一个代码,限制文本框输入数字,破折号和空格。它在包含文本框的窗口中运行良好。
public static bool IsTextAllowed(string text)
{
//regex that matches disallowed text
Regex regex = new Regex("[^0-9,-]+");
return !regex.IsMatch(text);
}
private void textbox1_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
e.Handled = !IsTextAllowed(e.Text);
}
然而,我想做的是把代码放入一个类,这样我就可以从多个窗口和页面访问它。这是不太顺利的部分。
我创建了一个名为rules的类,并将bool方法复制到其中。我无法找出一种方法来让事件处理程序在类中工作,所以我试图将该方法产生的字符串值传递给另一个字符串,并将其绑定到"textbox1"。代码如下:
public class rules : INotifyPropertyChanged
{
// String to contain passed on value from the regrex code
string integers;
//Method to pass on value to the string 'integers'
public bool this[string Digits]
{
get
{
//regex that matches disallowed text
Regex regex = new Regex("[^0-9,-]+");
return !regex.IsMatch(integers);
}
}
//Binding
public string Number
{
get
{
return integers;
}
set
{
if (integers != value)
{
integers = value;
RaisePropertyChanged("Number");
}
}
}
private void RaisePropertyChanged(string prop)
{
if (PropertyChanged != null)
{
PropertyChanged (this, new PropertyChangedEventArgs(prop));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
在窗口后面的代码中,我有'textbox1'在我设置数据上下文。
public signup()
{
InitializeComponent();
Rules = new rules();
this.DataContext = Rules;
}
然后在xaml:
中将'textbox1'绑定到它 <TextBox x:Name="textbox1" Text="{Binding Number, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
显然我做错了什么,因为它接受任何字符输入。
还有别的办法吗?
在预览中,您正在使用e.Handled
取消输入在setter中允许输入
文本框仍然有值-您没有做任何重置值
应该可以
通过调用RaisePropertyChanged("Number");如果istextalallowed (value)
if (integers == value) return;
if (IsTextAllowed(value)) { integers = value; }
RaisePropertyChanged("Number");