我的鼠标事件有问题!
我订阅了MouseEnter和MouseLeave事件。 如果我的鼠标光标示例位于面板的确切中心,则会触发MouseEnter和MouseLeave事件,为什么?
我的目标是感知,从鼠标光标位于3D PlotCube上开始,何时不是。
代码:
scene.MouseEnter += ILSurface_MouseEnter;
scene.MouseLeave += ILSurface_MouseLeave;
答案 0 :(得分:0)
绘图立方体捕获其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();
};
}
这会产生类似于下图的结果:
如果鼠标在情节上,表单的标题现在反映出来。请注意,无论曲线的旋转/形状如何,这都有效。有关ILNumerics中鼠标事件处理的完整文档,请访问:http://ilnumerics.net/mouse-events.html