Неожиданный вывод из проверки, если мышь в контроле
Я реализую пользовательский интерфейс перетаскивания с кнопками winForm, и после просмотра нескольких решений о том, как определить положение мыши и проверить ее по контрольному пределу, не удалось заставить его работать.
Я пытался:
button.ClientRectangle.Contains(PointToClient(Cursor.Position))
а также
button.ClientRectangle.Contains(PointToClient(Control.MousePosition))
Оба из них не смогли работать. Проверка границ мыши кажется простой операцией, но я действительно озадачен.
Мои предположения о неожиданных ценностях:
- Процесс получения позиции курсора может быть в неправильном углу изображения курсора
- Метод / Функция не работает по кнопкам по некоторым причинам
1 ответ
Решение
Вы используете неправильную ссылку на объект, вычисляя положение мыши относительно формы вместо кнопки. И вы пишете это так, что это очень трудно отлаживать. Fix:
var pos = button.PointToClient(Cursor.Position);
System.Diagnostics.Debug.WriteLine(pos); // Now it is easy
if (button.ClientRectangle.Contains(pos)) {
// etc...
}