2010-09-29 2 views
0

У меня есть fom, у которого есть один пользовательский элемент управления, который должен быть заполнен.C#: как имитировать событие Hover Hover с использованием таймера

Этот пользовательский элемент управления отображает различные изображения. У одного изображения есть идентификатор, и у меня есть список объектов imageId vs imageDetail.

Мышь Перемещение события этого пользовательского управления захватывается, и я показываю текущее положение X и Y мыши в подсказке инструмента.

Я также хочу отображать детали изображения в подсказке инструмента, когда пользователь держит мышь над изображением в течение некоторого времени.

Я попытался сделать это с помощью события Mouse Hover, но он только поднялся, когда мышь входит в пользовательский контроль. после этого, если я перемещаю мышь внутри пользовательского элемента управления, наведение мыши не срабатывает ...

Как я могу отобразить текущее положение X, Y вдоль детали изображения в подсказке инструмента.

есть ли способ имитации события House Hover в Mouse Move, используя некоторый таймер.

Есть ли пример кода ..

Я решил эту проблему

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

Возможный дубликат [Несколько событий MouseHover в элементе управления] (http://stackoverflow.com/questions/809922/multiple-mousehover-events-in-a-control) –

+0

Я не могу решить эту проблему. пожалуйста, любое другое решение – Mohsan

ответ

0

Самый простой способ будет вызывать подпрограмму MouseOver из подпрограммы MouseMove, как например:

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, чтобы он отображал вашу подсказку, если включена переменная прослушивания.

Вот какой код, чтобы продемонстрировать, что я изложил выше.

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 и связать различные методы (подпрограммы) с соответствующими событиями вашего контроля (форма, PictureBox, и т.д.).

+0

Пожалуйста, укажите пример кода – Mohsan

Смежные вопросы