windows dll中的System.StackOverflowException

时间:2017-07-26 18:13:15

标签: c# regex wpf

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。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

我看来整个方法是作为Paste事件的结果调用的。如果不是这样,那么就忽略这个答案。 ApplicationCommands.Paste.Execute()将触发事件,将代码置于无限循环中。

尝试将发送方对象转换为TextBox,然后相应地设置Text属性,而不是使用ApplicationCommands.Paste.Execute()。为了使其工作,您可能需要跟踪更多信息(光标位置,长度等),但您不应该陷入循环。