文本框.TextChanged事件限制为32000字符

本文关键字:32000字符 事件 TextChanged 文本 | 更新日期: 2023-09-27 17:50:23

我正在开发一个Windows Phone应用程序,它使用剪贴板通过使用屏幕键盘的文本框粘贴功能来交换大文本。

对我来说,如果有32000个字符的限制。

PasteTextBox.TextChanged += new TextChangedEventHandler(OnTextChanged);
private void OnTextChanged(object sender, TextChangedEventArgs e)
{
    CounterTextBlock.Text = PasteTextBox.Text.Length.ToString();
}

代码崩溃,如果我粘贴超过32000字符到文本框。TextBox.MaxLength0(无限制),增加它没有帮助。

这是一个技术限制还是我能做些什么来防止崩溃?

更新:也许我解释得不好。我又试了一次:剪贴板中可能有大量文本,我想将其导入到应用程序的剪贴板中。GetText在Windows-Phone上被屏蔽了,所以我绕过文本框来获取文本。如果剪贴板文本为<= 32000,则可以正常工作。

Update2:嗯,我不确定@f14shm4n写了它会工作后发生了什么。下面是我的完整示例:

    private void ApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        Clipboard.SetText("... Long Text with 1000 Chars ...");
        PasteTextBox.TextChanged += new TextChangedEventHandler(OnTextChanged);
    }
    private void OnTextChanged(object sender, TextChangedEventArgs e)
    {
        CounterTextBlock.Text = PasteTextBox.Text.Length.ToString();
    }

现在如果我运行应用程序并点击文本框,OnScreen-Display就会出现粘贴符号。我可以反复按粘贴键,直到计数器显示32000。再点击一次粘贴符号,应用程序就会崩溃。这种情况发生在Visual Studio模拟器和我真正的Windows Phone上。我相信这一定是一个小故障在粘贴机制,但我也可能是完全错误的。真的只有我吗?

Update3:经过一些测试,它现在看起来像一个"Umlaut"问题(äöü是德国Umlauts)。如果我在(!)他的追加循环之前将以下行添加到@f14shm4n的代码中,他的代码也会崩溃:

    sb.Append("ö");

奇怪的是,它不会崩溃与"ä"或"ü",只有与"ö"。如果我将这一行移动到(!)追加循环之后,它也不会崩溃。其他人能证实这种行为吗,还是只有我一个人?

更新4:Bug消息系统。异常未处理消息:系统类型的未处理异常。在System.Windows.ni.dll中发生异常附加信息:调用COM组件返回错误HRESULT E_FAIL。

- ${系统异常。异常:调用COM组件返回错误HRESULT E_FAIL。在MS.Internal.XcpImports。CheckHResult (UInt32人力资源)在MS.Internal.XcpImports。TextBox_GetRectFromCharacterIndex(DependencyObject sender, UInt32 charIndex, Boolean trailingEdge)在System.Windows.Controls.TextBox。GetRectFromCharacterIndex(Int32 charIndex, Boolean trailingEdge)在System.Windows.Controls.SipHelper。AdjustFrame(FrameworkElement元素,Double bottomMargin, Double&stillObscured)在System.Windows.Controls.SipHelper。SelectionChanged(对象发送者,RoutedEventArgs)在MS.Internal.CoreInvokeHandler。InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)在MS.Internal.JoltHelper。FireEvent(IntPtr unmanagedObj, IntPtr unmanagedobjgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)} System。除了

文本框.TextChanged事件限制为32000字符

我在做什么:

    private void b1_Click(object sender, RoutedEventArgs e)
    {
        int count = 10000;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < count; i++)
        {
            sb.Append(i.ToString());
        }
        DBG.WriteLine("SBLength: " + sb.Length);
        Clipboard.SetText(sb.ToString());
    }

1)此代码生成长度= 38890字符的长文本,并将其设置为剪贴板文本(如您的代码)。

2)然后点击文本框的可编辑区域,打开屏幕键盘。

3)点击过去按钮图标。

结果:剪贴板中的所有文本粘贴在第一个文本框中,当触发TextChanged事件时,第二个文本框(或TextBlock没关系)更新文本属性并显示38890。这是写吗?:)