Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Winform-检测一个用户操作是否触发了两个事件_C#_Winforms_Combobox_Event Handling - Fatal编程技术网

C#Winform-检测一个用户操作是否触发了两个事件

C#Winform-检测一个用户操作是否触发了两个事件,c#,winforms,combobox,event-handling,C#,Winforms,Combobox,Event Handling,我有一个Winform的组合框,当然我需要知道用户何时选择一个选项。问题在于每种事件类型都有其缺点: 使用关闭的下拉列表进行选择时不会触发textChanged(而是通过聚焦组合框并使用键盘箭头上下移动) 当下拉列表打开时,SelectionChangeCommittedHandler不会启动,用户通过键盘箭头上下移动,然后在组合框标题或外部单击鼠标 SlectedIndexChangedHandler被触发的次数太多,因此在web连接薄弱的情况下会减慢程序的速度 所以我想做这个解决方案: 注册

我有一个Winform的组合框,当然我需要知道用户何时选择一个选项。问题在于每种事件类型都有其缺点:

使用关闭的下拉列表进行选择时不会触发textChanged(而是通过聚焦组合框并使用键盘箭头上下移动)

当下拉列表打开时,SelectionChangeCommittedHandler不会启动,用户通过键盘箭头上下移动,然后在组合框标题或外部单击鼠标


SlectedIndexChangedHandler被触发的次数太多,因此在web连接薄弱的情况下会减慢程序的速度

所以我想做这个解决方案:

注册SelectionChangeCommittedHandler和textChanged事件,如果两者都被触发,则忽略其中一个事件。问题是我不知道如何检测这种情况(=一个用户操作中的两个事件)


我很高兴知道如何检测到这一点,或者,如果有的话,听听更好的解决方案。

有点脏,但我想给你一个解决方案:监听两个事件,并在其中一个事件触发时标记一个时间戳。一旦事件触发,请检查当前时间与上次操作时间,并根据您将决定的容差,仅当自上次操作以来经过一定时间后,才继续执行程序逻辑


我想大约100毫秒就足够了,但你自己试试。

“SlectedIndexChangedHandler启动次数太多,因此在web连接薄弱的情况下会减慢程序的速度。”-如果网络I/O阻止了你的UI,那么你无论如何都是“做错了”。。。你到底想达到什么目的?您的目标是什么?@Fildor在一个组合框中选择值时,我会在下一个组合框中填充数据,这些数据是我通过调用web服务以所选值作为参数而临时获得的。有更好的方法吗?取决于以下几点:1。这个组合包含多少项?2.它是否足够快,只能在提交选择后提取?3.从属组合中可以有多少项。。。我的目标是:例如,“预取”第二个组合框中所有可能的项目列表是否有意义?你真的需要在每次更改时提取项目吗?(=在滚动1.combo时是否需要查看2.combo中的项目更改?)另外:将一次获取的项目列表远程保存在本地缓存中是否有意义?(从而最大限度地减少网络流量)@Fildor实际上我会按照您的建议做,但只是部分做(在组合框的其余部分),因为所有选项的预取数据太多,因此会减慢加载过程。