开发者

C#: How to simulate Mouse Hover event using Timer

开发者 https://www.devze.com 2023-01-18 05:23 出处:网络
I have a fom which has one user control docked to fill. this user control displays different images.each image has Id and I have a list of imageId vs imageDetail object dictionary.

I have a fom which has one user control docked to fill.

this user control displays different images.each image has Id and I have a list of imageId vs imageDetail object dictionary.

Mouse Move event of this user control is captured and i am displaying current X and Y position of mouse in tool tip.

I also want to display image detail in tool tip when user keeps the mouse over image for some time.

I tried to do this with Mouse Hover event but it only raised when mouse enters in user control bound. after this if i move mouse within user control mouse hover event does not fire...

How can i display current X, Y position along image detail in tool tip.

is there any way to simulate Mouse Hover event within Mouse Move using some tim开发者_JAVA技巧er.

Is there any sample code..

I solved this problem by

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


The simplest way would be to call the MouseOver subroutine from the MouseMove subroutine as such:

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

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

If you want more control over when and how to display your tooltip, however, you'll need to do something similar to the following:

  1. Declare a listening variable at class level.
  2. Hook to the MouseHover event so the listening variable is turned on when the mouse enters.
  3. Hook to the MouseLeave event so the listening variable is turned off when the mouse leaves.
  4. Put your tooltip code in the MouseMove handler so it displays your tooltip if the listening variable is on.

Here's some code to demonstrate what's I outlined above.

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

Of course, you'll have to add a ToolTip with the name toolTip and associate the various methods (subroutines) with the appropriate events of your control (Form, PictureBox, etc).

0

精彩评论

暂无评论...
验证码 换一张
取 消