C#:如何使用Timer模拟Mouse Hover事件

时间:2010-09-29 10:44:18

标签: c# mouseevent

我有一个fom,其中有一个用户控件停靠填充。

此用户控件显示不同的图像。每个图像都有Id,我有一个imageId与imageDetail对象字典的列表。

捕获此用户控件的鼠标移动事件,我在工具提示中显示鼠标的当前X和Y位置。

当用户将鼠标悬停在图像上一段时间后,我还希望在工具提示中显示图像细节。

我尝试使用Mouse Hover事件执行此操作,但只有在鼠标进入用户控件绑定时才会引发此事件。在此之后如果我在用户控制鼠标中移动鼠标悬停事件不会触发......

如何在工具提示中沿图像细节显示当前的X,Y位置。

有没有办法使用一些计时器在鼠标移动中模拟鼠标悬停事件。

是否有示例代码..

我通过

解决了这个问题
public partial class Form1 : Form
    {
        Timer timer;
        bool moveStart;
        int count = 0;
        Point prev;

        public Form1()
        {
            InitializeComponent();
            timer = new Timer();
            timer.Interval = 1000;
            timer.Tick += new EventHandler(timer_Tick);
        }

        void timer_Tick(object sender, EventArgs e)
        {
            this.timer.Stop();
            this.moveStart = false;            
            this.toolTip1.SetToolTip(this, string.Format("Mouse Hover"));
            this.textBox1.Text = (++count).ToString();            
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (this.prev.X == e.X && this.prev.Y == e.Y)
                return;
            if (moveStart)
            {
                this.prev = new Point(e.X, e.Y);
                this.timer.Stop();
                this.toolTip1.SetToolTip(this, string.Format("Mouse Move\nX : {0}\nY : {1}", e.X, e.Y));
                this.timer.Start();
            }
            else
            {
                moveStart = true;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

最简单的方法是从MouseMove子程序中调用MouseOver子例程:

void MouseMove(object sender, MouseEventArgs e)
{
    //Call the MouseHover event
    MouseHover(sender, e);
}

void MouseHover(object sender, EventArgs e)
{
    //MouseHover event code
}

但是,如果您想要更多地控制何时以及如何显示工具提示,则需要执行类似以下操作:

  1. 在类级别声明一个侦听变量。
  2. 挂钩到MouseHover事件,以便在鼠标进入时打开侦听变量。
  3. 挂钩到MouseLeave事件,以便在鼠标离开时关闭侦听变量。
  4. 将工具提示代码放在MouseMove处理程序中,以便在侦听变量打开时显示工具提示。
  5. 以下是一些代码,用于演示我在上面概述的内容。

    class Form1
    {
        bool showPopup = false;
    
        void MouseHover(object sender, EventArgs e)
        {
            showPopup = true;
        }
    
        void MouseLeave(object sender, EventArgs e)
        {
            showPopup = false;
            toolTip.Hide(this);
        }
    
        void MouseMove(object sender, MouseEventArgs e)
        {
            if (showPopup) 
            {
                toolTip.Show("X: " + e.Location.X + "\r\nY: " + e.Location.Y, 
                             this, e.Location)
            }
        }
    }
    

    当然,您必须添加一个名为 toolTip ToolTip,并将各种方法(子例程)与您控件的相应事件(Form,PictureBox等)相关联。 )。