swt 捕获ccombo控件的enter操作时为什么会回车两次
时间: 2024-02-03 20:14:59 浏览: 24
在 SWT 中,当用户在 `Combo` 控件中按下回车键时,会触发 `SWT.DefaultSelection` 事件。如果你在 `Combo` 控件上注册了这个事件的监听器,那么这个监听器会被调用两次。原因是,当用户按下回车键时,首先会触发 `SWT.DefaultSelection` 事件,然后会触发 `SWT.KeyUp` 事件,而 `SWT.KeyUp` 事件也会被 `Combo` 控件的默认行为处理,导致又一次触发了 `SWT.DefaultSelection` 事件。
要解决这个问题,可以将 `Combo` 控件的默认行为禁用掉。可以使用以下代码:
```
combo.addListener(SWT.DefaultSelection, new Listener() {
public void handleEvent(Event event) {
// 执行你的操作
}
});
combo.addListener(SWT.KeyUp, new Listener() {
public void handleEvent(Event event) {
if (event.keyCode == SWT.CR) {
event.doit = false;
}
}
});
```
上面的代码中,我们在 `SWT.DefaultSelection` 事件的监听器中执行我们自己的操作,同时在 `SWT.KeyUp` 事件的监听器中禁用掉 `Combo` 控件的默认行为。这样,当用户按下回车键时,就只会触发一次 `SWT.DefaultSelection` 事件了。