C #: Как смоделировать событие мыши с помощью таймера - PullRequest
0 голосов
/ 29 сентября 2010

У меня есть fom, к которому подключен один пользовательский элемент управления.

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

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

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

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

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

есть ли способдля имитации события Mouse 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;
            }
        }
    }

1 Ответ

0 голосов
/ 29 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...