C# Mouse PreMove Event?

Может кто-нибудь сказать мне, если существует событие MousePreMove с eventargs, которые информируют меня о направлении движения курсоров?

Я нашел Win API для блокировки любого пользовательского ввода, но это не то, что я ищу.

2 ответа

Нет, нет MousePreMove событие, но вы можете написать что-то самостоятельно, чтобы получить направление курсора. Например:

public partial class Form1 : Form {

    Point cursorPosition;
    Direction cursorDirection, previousCursorPosition;

    public event EventHandler<MouseDirectionEventArgs> DirectionChanged;

    public Form1( ) {
        InitializeComponent( );
        cursorPosition = PointToClient( Cursor.Position );

        DirectionChanged += new EventHandler<MouseDirectionEventArgs>( Form1_DirectionChanged );
    }

    void Form1_DirectionChanged( object sender, MouseDirectionEventArgs e ) {
        MessageBox.Show( e.MouseDirection.ToString( ) );
    }

    protected override void OnMouseMove( MouseEventArgs e ) {

        if ( e.X > cursorPosition.X && e.Y > cursorPosition.Y )
            cursorDirection = Direction.RightDown;
        else if ( e.X > cursorPosition.X && e.Y < cursorPosition.Y )
            cursorDirection = Direction.RightUp;
        else if ( e.X < cursorPosition.X && e.Y > cursorPosition.Y )
            cursorDirection = Direction.LeftDown;
        else if ( e.X < cursorPosition.X && e.Y < cursorPosition.Y )
            cursorDirection = Direction.LeftUp;

        OnDirectionChanged(new MouseDirectionEventArgs( cursorDirection ) );

        previousCursorPosition = new Point(cursorPosition.X, cursorPosition.Y);
        cursorPosition = e.Location;

        base.OnMouseMove( e );
    }

    protected virtual void OnDirectionChanged(MouseDirectionEventArgs e){
        if ( DirectionChanged != null )
            DirectionChanged( this, e );
    }
}

enum Direction {
    LeftUp,
    LeftDown,
    RightUp,
    RightDown
}

class MouseDirectionEventArgs : EventArgs {
    public readonly Direction MouseDirection {
        get;
        set;
    }

    public MouseDirectionEventArgs( Direction direction ) {
        MouseDirection = direction;
    }
}

Это простая программа, которая показывает направление мыши по сравнению с предыдущим положением мыши.

РЕДАКТИРОВАТЬ:

Если вы хотите предотвратить движение мыши в направлении, вы должны сделать это следующим образом:

void Form1_DirectionChanged( object sender, MouseDirectionEventArgs e ) {
     if(e.MouseDirtection == Direction.LeftUp) //example
        Cursor.Position = PointToScreen( previousCursorPosition );
}

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

Однако, так как это ваша цель, вам будет лучше, если вы поменяете свое мышление с "перестаньте двигать мышь" на "если мышь не там, где я хочу, поставьте ее там, где я делаю".

Итак, используйте событие OnMouseMove в соответствии с кодом Fuex, и что-то вроде этого (это просто psuedocode)

cursorPosition = e.Location;

if (cursorPosition! = alowedArea) {cursorPosition =iousCursorPostion; }

iousCursorPostion = cursorPosition;

e.Location = cursorPosition;

Другие вопросы по тегам