Неожиданный вывод из проверки, если мышь в контроле

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

Я пытался:

button.ClientRectangle.Contains(PointToClient(Cursor.Position))

а также

button.ClientRectangle.Contains(PointToClient(Control.MousePosition))

Оба из них не смогли работать. Проверка границ мыши кажется простой операцией, но я действительно озадачен.

Мои предположения о неожиданных ценностях:

  1. Процесс получения позиции курсора может быть в неправильном углу изображения курсора
  2. Метод / Функция не работает по кнопкам по некоторым причинам

1 ответ

Решение

Вы используете неправильную ссылку на объект, вычисляя положение мыши относительно формы вместо кнопки. И вы пишете это так, что это очень трудно отлаживать. Fix:

var pos = button.PointToClient(Cursor.Position);
System.Diagnostics.Debug.WriteLine(pos);         // Now it is easy
if (button.ClientRectangle.Contains(pos)) {
    // etc...        
}
Другие вопросы по тегам