【问题标题】:Help with this issue帮助解决这个问题
【发布时间】:2011-04-11 14:33:07
【问题描述】:

问题来了:

我使用的 GUI 系统的工作方式如下:

小部件可以监听鼠标事件。侦听器可以消费他们正在侦听的事件,因此,他们正在侦听的小部件将不会收到该事件,即使它是为他们准备的,也只有侦听器会收到它。

问题出在这里:

滚动窗格内部有一个 ListBox。列表框可以滚动。滚动窗格也可以滚动。现在发生的事情是当我鼠标滚轮和鼠标下的小部件是列表框时,列表框和滚动窗格都会移动。我看到的唯一解决方案是滚动窗格消耗所有鼠标滚轮事件,但是 ListBox 无法滚动。

我想要的行为是让 ListBox 在获得焦点时滚动,但如果我这样做了,它将不起作用,因为例如,如果滚动窗格内的单选按钮获得焦点,我仍然希望滚动窗格滚动,它仅适用于不需要滚动条的小部件,例如文本框和列表框。

谢谢

另外,我使用的 gui 系统是我自己开发的。

【问题讨论】:

  • 您正在用Java、.NET、 C++开发一个GUI系统?
  • 不,解决方案的语言对我来说不是问题,我是用 C++ 做的,但原理是一样的。
  • James 指的是您的标签,这些标签非常具有误导性

标签: c++ user-interface


【解决方案1】:

处理这种情况的常用方法是 ListBox 仅在 实际滚动时才使用该事件。如果将鼠标放在列表框中并使用滚轮,列表框会滚动,直到达到其滚动限制。之后滚轮的进一步移动会导致滚动窗格滚动。

显然,这方面存在变体——重要的是要决定你真正想要发生的事情。

您还需要另一种滚动滚动窗格的方式,这样如果用户明确想要滚动它,他们就可以滚动,而不必滚动到 ListBox 的末尾。 ScrollPane 上的滚动条是一种方式。您还应该确保有一种方法可以在不使用鼠标滚轮的情况下滚动 ListBox。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-07
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2019-04-15
    • 2023-04-06
    相关资源
    最近更新 更多