gpt4 book ai didi

c# - 无法在 TextChanged 中使用撤消

转载 作者:太空狗 更新时间:2023-10-29 17:35:06 25 4
gpt4 key购买 nike

当使用textbox.Undo();我收到以下错误:

Cannot Undo or Redo while undo unit is open.

现在我明白了为什么会这样(因为它是一个事件的可撤消事件)但是如果用户键入了无效字符,我可以通过什么事件对文本框执行验证并撤消更改?

最佳答案

回答 simbay 的方法,我认为它被驳回了。

您不能在 TextChanged 中调用 Undo,因为 TextBox 仍在准备撤消操作。它似乎有时有效,有时无效,因此这表明在事件发出信号和撤消准备完成之间存在竞争条件。

然而,在 Dispatcher 上调用撤消将允许文本框完成其撤消准备。您可以验证文本更改的结果,然后决定是要保留还是撤消更改。这可能不是最好的方法,但我试过了,将一堆文本更改并粘贴到文本框中,但无法重现异常。

只有当您想防止输入或粘贴无效字符时,“接受的答案”才合适,但一般来说,我经常做更多涉及文本框输入的验证,并想验证最终的文本值。从预览事件中辨别最终文本并不容易,因为就控件而言,还没有发生任何事情。

回答Terribad的问题,simbay的回答在更多情况下更好更简洁。

tb.TextChanged += ( sender, args ) =>
{
if(! MeetsMyExpectations( tb.Text ) )
Dispatcher.BeginInvoke(new Action(() => tb.Undo()));
};

我已经阅读了很多关于文本框验证的疯狂冒险,这和我发现的一样简单。

关于c# - 无法在 TextChanged 中使用撤消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11115777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com