Какое событие возникает при перемещении мыши при нажатии кнопки? - PullRequest
2 голосов
/ 28 января 2011

Мне нужно событие, которого нет в стандартных событиях .NET Framework. Например, перемещение мыши, когда левая кнопка мыши нажата.

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

Что мне делать? Как я могу создавать новые события? Как я могу изменить поведение?

Любая помощь приветствуется.

Ответы [ 2 ]

6 голосов
/ 28 января 2011

Ваша проблема в том, что когда событие MouseDown происходит на кнопке, эта кнопка «захватывает» мышь и не отпускает ее, пока кнопка не будет отпущена, что означает, что события MouseMove не будут получены другими кнопками.

Здесь есть код , который может помочь:

 // Assuming all buttons subscribe to this event:
 private void buttons_MouseMove (object sender, MouseEventArgs e)
 {
   if (e.Button == System.Windows.Forms.MouseButtons.Left)
      {
       Control control = (Control) sender;
       if (control.Capture)
       {
          control.Capture = false;
       }
       if (control.ClientRectangle.Contains (e.Location)) 
       {
           Control.BackgroundImage = ...;
       }
    }
  }
3 голосов
/ 28 января 2011

MouseMove-Event имеет свойство под названием «Button», которое сообщает вам, какая кнопка нажата. Так что все, что вам нужно сделать, это что-то вроде этого:

void panel1_MouseMove(Object sender, System::Windows::Forms::MouseEventArgs e) {

    if(e.Button = MouseButtons.Left){
        //Do what you want when mouse_move with left button pressed      
    }      
}

Вышеупомянутый код не тестировался, и я не посмотрел правильное написание и т. Д. В свойствах, просто попробуйте в IntelliSense / MSDN.

Вы можете найти еще больше информации в MSDN: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mousemove%28v=vs.71%29.aspx

Что касается второго вопроса, просто попробуйте найти подходящее событие или переписать WindowProc-Event-Function, где вы можете прослушать WindowMessages и получить то, что вам нужно - больше информации дано в http://msdn.microsoft.com/en-us/library/ms633573%28v=VS.85%29.aspx и http://www.pinvoke.net

...