【发布时间】:2017-07-31 14:58:54
【问题描述】:
我目前在我的一个 Windows 窗体中使用 MSCharts。 MSCharts 的一个古怪之处在于,除非图表具有焦点,否则您无法在图表中触发 MouseWheel 事件。为了解决这个问题,大多数人说应该在图表中添加MouseEnter 事件,然后在图表中添加Focus() 以允许触发MouseWheel 事件(参见此处:Enabling mouse wheel zooming in a Microsoft Chart Control)。
假设我打开了一个完全不同的窗口(称为Window A),它恰好部分位于我的图表前面(称为窗口是Window B)。如果我不小心将鼠标在Window B 中的图表上移动了 10 毫秒,Window B 将成为焦点,Window A 将被置于其后面,这非常令人沮丧。
我探索了不同的选择。
- 将
Window B的TopMost属性设置为true。这样做的问题是用户必须关闭窗口或将其最小化才能隐藏它。如果有很多窗口,它似乎和最初的问题一样令人沮丧。 - 不是将
MouseEnter事件赋予Focus()的能力,而是让MouseClick或MouseHover事件赋予Focus()。MouseClick的问题是用户总是必须先单击图表才能放大,这还不错,但可能很烦人。MouseHover可以,但是事件认为是悬停的时间真的很短。
最后,我想要它,以便我可以将鼠标放在图表上并滚动而无需执行任何操作(鼠标单击或其他任何操作)。除此之外,如果我不小心将鼠标移到它上面一秒钟,我不希望包含图表的表单将焦点移回它。
编辑:
似乎根据@TaW,图表不需要焦点来触发Window 10中的MouseWheel事件。不幸的是,Windows 7不是这种情况。
【问题讨论】:
-
我目前在我的一个 Windows 窗体中使用 MSCharts。 MSCharts 的一个古怪之处在于,除非图表具有焦点,否则您无法在图表中触发 MouseWheel 事件。 我无法确认。 使用 Win10 我发现触发了 MouseWheel无论焦点在哪个控件或窗体上,只要鼠标悬停在图表上即可。 也没有 将焦点设置在图表上,打开表单。不确定其他 Windows 版本,但在当前的 W10 64 上一切都很好!
标签: c# mschart microsoft-chart-controls