首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何区分用户事件和合成事件?

如何区分用户事件和合成事件?
EN

Stack Overflow用户
提问于 2009-01-28 16:02:16
回答 2查看 145关注 0票数 1

我有一个主要由TreeViewer组成的JFace编辑器。它连接到一个ContentOutlinePage,使大纲视图变得生动起来。

当其中一个接收到SelectionChangedEvent时,它们会调用另一个setSelection()方法...这就是问题所在。setSelection()生成另一个SelectionChangedEvent ...因此无限循环被连接起来。

是否有一种方法可以判断SelectionChangedEvent是否是由实际的用户交互创建的,而不是由另一个调用setSelection()的对象创建的

还有没有更好的方法来阻止这种致命的拥抱?

欢迎提供线索。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-01-28 16:07:27

通常,您将检查例程开头的标志,以检查您是否处于事件处理程序的中间。如果设置了该标志,则退出而不进行处理。

如果未设置该标志,则设置该标志、处理,然后重新设置该标志。

票数 3
EN

Stack Overflow用户

发布于 2009-02-13 08:08:13

另一种有效的模式是删除事件侦听器,进行选择,然后再次添加事件侦听器。这确保了在代码中有一个地方你必须担心这个问题--使用一个标志,你必须同时维护两个地方。

此外,SelectionChangedChanged可能(虽然不确定)放在事件堆栈的顶部(即异步执行)。在这种情况下,还可以最小化查看器不传播通知的时间段。

总体而言,无论鼠标是否被单击,生成的SelectionChangedEvent都是相同的,这让我感到失望。我想要做到这一点并不像人们希望的那样容易。我有一次不得不修改一个文本编辑器类的行为,使其具有两种新的插入事件(用户生成和网络生成),以便共享该文本编辑器类。我希望看到更多关于这方面的讨论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/488190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档