Я пишу пользовательский элемент управления с поведением типа кнопки. Пользователь должен иметь возможность обрабатывать событие клика, а элемент управления должен визуально сигнализировать о его нажатии. Я изменяю визуальное состояние элемента управления в методе OnMouseDown и возвращаю его обратно в OnMouseUp, и это отлично работает; однако я заметил, что при проверке мой элемент управления не всегда будет получать сообщения мыши, но устройство делает правильные звуковые сигналы для щелчка, а элемент управления не теряет фокус.UserControl иногда не получает сообщений о клике
P.S. Если кто-нибудь знает о хорошей утилите, которая позволит мне регистрировать сообщения Windows, отправленные в мое приложение, которые будут раздуваться и, возможно, помогут мне понять, что может быть неправильным.
Вот что у меня есть очень упрощенный вариант того, что у меня есть
public class CustomButton : UserControl
{
private bool _isMouseDown = false;//flag tells PaintBorder what state to draw
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
PaintBackground(e);
PaintBorder(e, _isMouseDown);
}
protected override void OnGotFocus(EventArgs e)
{
this.Invalidate();
base.OnGotFocus(e);
}
protected override void OnTextChanged(EventArgs e)
{
this.Invalidate();
base.OnTextChanged(e);
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
_isMouseDown = true;
if (!this.Focused)
{
this.Focus();
}
else //getting focus causes Invalidate, no need to call twice
{
this.Invalidate();
}
}
base.OnMouseDown(e);
}
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
if (_isMouseDown)
{
_isMouseDown = false;
this.Invalidate();
}
base.OnMouseUp(e);
}
}
Опубликуйте некоторый код, чтобы показать, как вы создаете кнопки, а также обрабатываете их действия. Без этого мы можем только догадываться, что происходит на самом деле. –
@NicholasPost: Код встал! – jp2code
Чтобы просмотреть сообщения в окне, вы можете использовать RemoteSpy (часть удаленных инструментов, поставляемых с WM SDK): http://msdn.microsoft.com/en-us/library/ms894593.aspx. Он работает как локальный инструмент VS Spy. – josef