[C#]Mouse Stopped Move

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Sharper, 18 Mar 2011.

  1. Sharper

    Sharper New Member

    Joined:
    10 Mar 2010
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Стоит такая задача нужно узнать, когда пользователь перестает двигать по форме. :confused:

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

    Использую Form1_MouseMove но не выходит сделать грамотно условие прошу помощи.


    P.S вроде задача не сложная.
     
  2. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    как вариант событие mouse_move + timer
     
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    1) 2 глобальыне переменных хранящие координаты мыши (p1, p2)
    2) глобальная переменная отвечающая за факт начала движения. (f = false)
    3) при mousemove делаешь так:
    - p1 = текущие координаты
    - f = true
    4) также есть высокоскоростной таймер (скорость подбирается в зависимости от скорости срабатывания на прекращение движения мыши, а также на скорость движения мыши. Опытным путем всё подбирается)
    5) в этом таймере делаешь фишку
    если f == true и p1 == p2 тогда выводишь сообщение какое тебе нужно
    иначе - p2 = p1

    суть такова:
    В mousemove ты постоянно меняешь координату мыши + ставишь флаг что движение начало
    а в таймере ты проверяешь текущее состояние координат с предыдущим. если совпало, знfчит движения не было, если не совпало, значит есть движение и на до запомнить координаты новые

    В принципе чтобы нормаль обрабатывать даже медленное, но не прерывное движения достаточно таймера с периодом 100 мс
     
    #3 slesh, 18 Mar 2011
    Last edited: 18 Mar 2011
  4. Sharper

    Sharper New Member

    Joined:
    10 Mar 2010
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0

    Спасибо все сделал !!

    Кому может пригодится

    PHP:
    Point p1 p2 ;
    bool f false;

    ...

    private 
    void Form1_MouseMove(object senderMouseEventArgs e)
            {
                
    true;
                
    p1 Cursor.Position;
            }

    private 
    void timer1_Tick(object senderEventArgs e)
            {
                
    this.label1.Text p1.X.ToString() + " " p1.Y.ToString();
                
    this.label2.Text Cursor.Position.X.ToString() + " " Cursor.Position.Y.ToString();
                if (
    && p1 == p2)
                {
                    
    this.label3.Text "No Move";
                }
                else
                {
                    
    this.label3.Text "Move";
                    
    p2 p1;
                }
            }

    private 
    void button1_Click(object senderEventArgs e)
            {
                
    timer1.Start();
            }