2015-02-01 2 views
0

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

Private Sub TableLayoutPanel1_MouseMove(sender As Object, e As MouseEventArgs) Handles TableLayoutPanel1.MouseMove 
    If e.Location.X > Me.Width - 7 And e.Location.Y > 12 And e.Location.Y < Me.Height - 12 Then 
     Me.Cursor = Cursors.SizeWE 
    ElseIf e.Location.X < 6 And e.Location.Y > 12 And e.Location.Y < Me.Height - 12 Then 
     Me.Cursor = Cursors.SizeWE 
    ElseIf e.Location.Y > Me.Width - 12 And e.Location.X > 12 And e.Location.X < Me.Width - 12 Then 
     Me.Cursor = Cursors.SizeNS 
    ElseIf e.Location.Y < 6 And e.Location.X > 12 And e.Location.X < Me.Width - 12 Then 
     Me.Cursor = Cursors.SizeNS 
    Else 
     Me.Cursor = Cursors.Default 
    End If 
End Sub 

Что интересно, есть ли другой MouseMove событие, которое будет сосредоточено только на позиции курсора, а не то, что его путешествие по. Я пробовал сделать mousemove, но это не сработало.

Надеюсь, что это имеет смысл.

+2

Это нормально, другие элементы управления получают событие MouseMove. Вам нужно будет установить свойство Capture в значение True, чтобы этого не произошло. Не то, что действительно полезно, это не проблема, которую нужно решить. –

ответ

0

Вы можете обработать событие MouseMove для родителя TableLayoutPanel и всех его детей одним способом и просто перевести местоположение по мере необходимости.

Private Sub TableLayoutPanel1_MouseMove(sender As Object, e As MouseEventArgs) Handles TableLayoutPanel1.MouseMove 
    Dim ctrl = DirectCast(sender, Control) 
    Dim location = TableLayoutPanel1.PointToClient(ctrl.PointToScreen(e.Location)) 

    'location is now a Point relative the the top-left corner of TableLayoutPanel1. 
    '... 
End Sub 

Private Sub HandleMouseMoveForTableChildren() 
    For Each child As Control In TableLayoutPanel1.Controls 
     RemoveHandler child.MouseMove, AddressOf TableLayoutPanel1_MouseMove 
     AddHandler child.MouseMove, AddressOf TableLayoutPanel1_MouseMove 
    Next 
End Sub 

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

+0

Спасибо jmcilhinney! Это отлично работает. – Jarron

+0

Привет, jmcilhinney, еще один вопрос, если смогу. Кажется, что другие элементы управления теперь наследуют событие tablelayout. Например, если курсор изменится на 5 пикселей с вершины таблицы, курсор также изменится на 5 пикселей с вершины любого другого элемента управления, ну, по крайней мере, это то, что происходит у мама. Знаете ли вы об этом? – Jarron

+0

Хммм, я мог бы использовать оператор if для распознавания изменения управления. Не знаю, как это сделать на данный момент, но я должен уметь это выяснить, если это возможно. – Jarron