我对鼠标事件有疑问!
我已经订阅了 MouseEnter 和 MouseLeave 事件。如果我的鼠标光标示例位于面板的正中心,则触发了 MouseEnter 和 MouseLeave 事件,为什么?
我的目标是感知,从鼠标光标在 3D PlotCube 上的时间开始,何时不在。
代码:
scene.MouseEnter += ILSurface_MouseEnter;
scene.MouseLeave += ILSurface_MouseLeave;
我对鼠标事件有疑问!
我已经订阅了 MouseEnter 和 MouseLeave 事件。如果我的鼠标光标示例位于面板的正中心,则触发了 MouseEnter 和 MouseLeave 事件,为什么?
我的目标是感知,从鼠标光标在 3D PlotCube 上的时间开始,何时不在。
代码:
scene.MouseEnter += ILSurface_MouseEnter;
scene.MouseLeave += ILSurface_MouseLeave;
绘图立方体捕获其 ScreenRect 矩形的整个区域的事件。在标准设置中,此矩形设置为 (0,0,1,1),填充整个面板。因此,除非您的面板上有多个绘图立方体/摄像机,否则鼠标基本上总是在绘图立方体上。
尽管如此,为了展示 MouseEnter 和 MouseLeave 事件的功能,我将发布一个示例,它作用于绘图立方体内的绘图。当鼠标进入绘图时,它会在表单的标题栏中写“On Plot”。一旦鼠标离开情节,就会写下“Off Plot”。
从一个新面板开始并设置 ILNumerics,如下所示:http: //ilnumerics.net/visualization-api-quick-start-guide.html
将一个 ILPanel 拖到 form1 上并双击它以切换到自动生成的 ilPanel1_Load 事件处理程序的代码。将处理程序替换为以下代码:
private void ilPanel1_Load(object sender, EventArgs e) {
var surfPlot = new ILSurface(ILMath.tosingle(ILSpecialData.sincf(50, 40))) {
Colormap = Colormaps.Prism
};
var pc = ilPanel1.Scene.Add(new ILPlotCube(twoDMode: false) {
surfPlot
});
surfPlot.MouseEnter += (_s, _a) => {
if (!_a.DirectionUp)
Text = "On Plot - Target: " + _a.Target.ToString();
};
surfPlot.MouseLeave += (_s, _a) => {
if (!_a.DirectionUp)
Text = "Off Plot - Target: " + _a.Target.ToString();
};
}
这将产生类似于下图的结果:
The title of the form now reflects, if the mouse is on the plot or not. Note, that this is working regardless of the rotation / shape of the plot. The full documentation of the mouse event handling in ILNumerics is found here: http://ilnumerics.net/mouse-events.html