无法在“MouseHover”事件中获取“MouseEventArgs”

6

我相信这个问题有一个简单明了的答案,但是我似乎无法解决它。

我正在尝试使用鼠标悬停事件 mousehover 添加一个 tooltip。历史上,我一直使用 mousemove 事件,但不幸的是,这意味着 tooltip 将随程序能够执行的速度更新。我只希望在鼠标停留在我的图表上时显示。

问题在于我无法获取 e.Location 属性,因为事件处理程序仅使用 EventArgs,而不是 MouseEventArgs。有没有办法可以改变这种情况?或者像 MouseEventArgs mouse = new MouseEventArgs(); 这样添加一行代码(我收到一个错误,说需要更多的参数,但我不知道哪些参数)。

感谢任何帮助 :)

        private void chSysData_MouseHover(object sender, EventArgs e)
        {
            //Add tooltip
            try
            {
                int cursorX = Convert.ToInt32(chSysData.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X));
                tipInfo = "System: " + systemVoltage[cursorX].ToString("0.00") + Environment.NewLine + "Current: " + currArray[cursorX].ToString("0.00") + Environment.NewLine;
                tooltip.SetToolTip(chSysData, tipInfo);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
1个回答

11

将 Cursor.Position 属性映射到您的图表上。以下是一个使用面板的示例:

    private void panel1_MouseHover(object sender, EventArgs e) {
        var pos = panel1.PointToClient(Cursor.Position);
        toolTip1.Show("Hello", panel1, pos);
    }

请注意,这与使用toolTip1.Show("Hello", panel1); 没有什么不同;但是您可能想要微调工具提示的位置,以避免它被鼠标指针遮挡。


我正在研究这个错误:Member 'System.Windows.Forms.Cursor.Position.get' cannot be accessed with an instance reference; qualify it with a type name instead。我以前从未见过。在我试图解决它的时候有什么建议吗? - tmwoods
"Cursor"是类型名称,而不是对象名称。确保它不会与您在代码中使用的变量发生冲突,您正在使用像"cursorX"这样的名称。如果这并没有帮助解决问题,请单击"提问"按钮以更好地记录您的问题。 - Hans Passant
我刚刚搜索了我的程序,没有名为“Cursor”的变量。在我提出另一个问题之前,我会先继续挖掘一下。除非我自己先进行了研究,否则我不喜欢提问。感谢您的帮助 :) - tmwoods
搞定了:var pos = chSysData.PointToClient(System.Windows.Forms.Cursor.Position);。再次感谢! - tmwoods

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接