2016-05-26 4 views
-1

Вот пример одного из моих обработчиков событий формы мыши:Почему мои события мыши не запускаются?

private void GENIO_Viewer_Form_MouseDown(object sender, MouseEventArgs e) 
{ 
    if(e.Button == MouseButtons.Left) 
    { 
     m_bLeftButton = true; 
     m_MousePosition = e.Location; 
     m_MouseClick = e.Location; 

     if(m_bZoomWindow) 
     { 
      m_Points.Clear(); 
      m_Points.Add(GetWorldCoordinates(e.Location)); 
     } 
    } 

    base.OnMouseDown(e); 
} 

я поставил точку останова в нем, и он никогда не сработал. Я что-то пропустил в своем определении формы или что-то еще?

Update:

Форма имеет увеличенный TableLayerPanel поэтому я добавил дополнительный обработчик события:

private void tableLayoutPanel_MouseDown(object sender, MouseEventArgs e) 
{ 
    MessageBox.Show("Yes"); 
} 

Но даже это не получить перехвачены. TableLayoutPanel в свою очередь отображает объект UserControl1 (полученный из UserControl).

Проблема в том, что, даже если я добавлю правый обработчик (в UserControl), мне все равно придется откорректировать это до самой формы, так как я должен выполнить свою обработку.

Update: Это неполный список обработчиков событий для моей формы:

enter image description here

+5

Форма не будет получать события мыши, если есть контроль на этом пути. Другими словами, вещь, на которую нажимают, получает события мыши. Если это элемент управления, тогда элемент управления получит события мыши. Здесь вы должны обращаться с ними. –

+2

Ответы не должны быть помещены в вопрос. Если вы решите свою проблему, вы можете опубликовать свой ответ ниже. – LarsTech

+1

@LarsTech Я (в конце концов), но я пробую этот PreviewMouseDown. –

ответ

1

Я не могу показаться, чтобы получить событие PreviewMouseDown работать. Я попытался вручную отредактировать код, и он не будет компилироваться.

Основываясь на чьем-то комментарии, я установил тот факт, что мне пришлось перехватить сообщение с правильным контролем, с фокусом. Это был объект, полученный от UserControl.

Поэтому мне пришлось добавить обработчики событий в , что класс. Например:

protected override void OnMouseDown(MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     m_bLeftButton = true; 
     m_MousePosition = e.Location; 
     m_MouseClick = e.Location; 

     if (m_bZoomWindow) 
     { 
      m_Points.Clear(); 
      m_Points.Add(GetWorldCoordinates(e.Location)); 
     } 
    } 

    base.OnMouseDown(e); 
} 
+0

Почему 'PreviewMouseDown' не работает? –

+0

@FirstStep Я не мог найти его. Я попробовал вручную ввести его. Получил крик. Только тот, который работал, был PreviewKeyDown. –

+0

Что еще у вас есть и выше 'PreviewKeyDown'? Не могли бы вы распечатать страницу вашего обработчика событий? Как и я. Мне любопытно сейчас –

Смежные вопросы