public static void AlphabeticPasting(object sender, DataObjectPastingEventArgs e)
{
if (e.DataObject.GetDataPresent(typeof(string)))
{
var text = e.DataObject.GetData(typeof(string)) as string;
if (!Regex.IsMatch(text, (Properties.Resources.Alpha)))
{
//replace and recopy
var trimmed = Regex.Replace(text,Properties.Resources.AlphaPasting, string.Empty);
e.CancelCommand();
Clipboard.SetData(DataFormats.Text, trimmed);
ApplicationCommands.Paste.Execute(trimmed, e.Source as FrameworkElement);
}
}
}
我想将数字部分限制为粘贴在文本框中, 我在textbox的DataObject.Pasting属性中调用此方法,Properties.Resources.Alphabet和Properties.Resources.AlphabetPasting是正则表达式部分,我在资源文件中提到了regex方程。
Alpha = ^[[A-Za-z-~`!@#$%^&*()_+=|{}':;.,<>/\\]?]*$ and AlphaPsting = [^[A-Za-z-~`!@#$%^&*()_+=|{}':;.,<>/\\]?]+
我需要从资源文件中获取正则表达式。
如果我试图通过文本框中的任何内容,我会收到System.StackOverFlowException。请帮我解决这个问题。
答案 0 :(得分:0)
我看来整个方法是作为Paste事件的结果调用的。如果不是这样,那么就忽略这个答案。 ApplicationCommands.Paste.Execute()将触发事件,将代码置于无限循环中。
尝试将发送方对象转换为TextBox,然后相应地设置Text属性,而不是使用ApplicationCommands.Paste.Execute()。为了使其工作,您可能需要跟踪更多信息(光标位置,长度等),但您不应该陷入循环。