0

我对鼠标事件有疑问!

我已经订阅了 MouseEnter 和 MouseLeave 事件。如果我的鼠标光标示例位于面板的正中心,则触发了 MouseEnter 和 MouseLeave 事件,为什么?

我的目标是感知,从鼠标光标在 3D PlotCube 上的时间开始,何时不在。

代码:

scene.MouseEnter += ILSurface_MouseEnter;
scene.MouseLeave += ILSurface_MouseLeave;
4

1 回答 1

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();
    };
}

这将产生类似于下图的结果: Hadling Mouse Enter and Mouse Leave in ILNumerics

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

于 2013-10-21T14:59:48.493 回答