我目前在我的一个Windows窗体中使用MSCharts。关于MSCharts的一个奇怪的事情是,除非图表具有焦点,否则您无法在图表中触发MouseWheel
事件。为了解决这个问题,大多数人都说应该在图表中添加MouseEnter
事件,然后在图表Focus()
中添加MouseWheel
个事件,以便点击Window A
事件(请参阅此处: Enabling mouse wheel zooming in a Microsoft Chart Control)。
我们说我拉出了一个完全不同的窗口(称之为Window B
),恰好位于我的图表前面(称之为Window B
)。如果我意外地将鼠标移动到Window B
中的图表上甚至10毫秒,Window A
将获得焦点,Window B
将被置于其后面,这非常令人沮丧。
我已经探索了不同的选择。
TopMost
' s MouseEnter
属性设置为true。这个问题是用户必须关闭窗口或将其最小化以隐藏它。如果有很多窗口,它似乎和最初的问题一样令人沮丧。Focus()
事件能够MouseClick
,而是将MouseHover
或Focus()
事件发送到MouseClick
。问题MouseHover
是用户必须首先点击图表进行缩放,这不是很糟糕,但可能很烦人。 MouseWheel
没问题,但事件认为是悬停的时间非常短暂。最后,我想要它,以便我可以将鼠标放在图表上并滚动而无需做任何事情(鼠标点击或其他任何事情)。除此之外,如果我不小心将鼠标移到它上面一秒钟,我不希望包含图表的表单将焦点重新放回到它。
编辑:
根据@TaW的说法,图表似乎并不需要关注触发窗口10中的Message::with([
'last_sender' => function($q) use ($userId = Auth::user()->id) {
$q->where('id','!=',$userId)
}
])->get();
事件。不幸的是,Windows 7并非如此。
答案 0 :(得分:0)
这可能看起来有点hacky,但它适用于这种情况:
这可以通过使用FindForm
方法来实现。直到现在我才知道这是件事。您可以在此处详细了解:https://msdn.microsoft.com/en-us/library/system.windows.forms.control.findform(v=vs.110).aspx
myChart.MouseEnter+= delegate(object sender, EventArgs args) //add a mouse enter event to your chart
{
if (!chart.Focused) //if chart isn't focused
{
if (chart.FindForm().ContainsFocus) //check if the form the chart is in contains focus
chart.Focus(); //if the chart isn't focused, but the form is focused, focus on the chart
}
};
当您将鼠标移动到图表中时,这仍然会使图表成为焦点,并且不允许包含图表的表单从您正在处理的表单中获取焦点。