问题是:
我使用的GUI系统的工作方式如下:
小部件可以监听鼠标事件。侦听器可以使用它们正在侦听的事件,因此,它们正在侦听的小部件将不会接收到该事件,即使该事件是为它们准备的,也只有侦听器接收到了该事件。
问题在这里:
滚动窗格内部有一个ListBox。列表框可以滚动。也可以滚动滚动窗格。现在发生的事情是,当我使用鼠标滚轮时,鼠标下的小部件是列表框,列表框和滚动窗格都移动了。我看到的唯一解决方案是,滚动面板消耗所有的鼠标滚轮事件,但没有办法为ListBox永远滚动。
我想要的行为是ListBox滚动时,它有焦点,但如果我这样做,它不会工作,因为例如,如果一个单选按钮在滚动窗格集中,我仍然希望滚动窗格滚动,它只适用于小部件滚动条,如文本框和列表框,这是不需要的。
感谢另外,我正在使用的gui系统是我自己开发的。
通常的处理方法是,ListBox仅在滚动时才使用事件。如果将鼠标放在列表框中并使用滚轮,则列表框将滚动,直到达到其滚动限制。之后,滚动轮的进一步移动将导致滚动面板滚动。
很明显,这有很多变体——重要的是决定你真正想要发生什么。
您还需要另一种滚动滚动窗格的方式,这样如果用户明确地想滚动它,他们就可以滚动,而不必滚动到ListBox的末尾。ScrollPane上的滚动条是一种方式。您还应该确保有一种不使用鼠标滚轮滚动ListBox的方法。