Как получить события mouseMove под дочерними элементами управления

Один "О нет, это не правильно", часто в форме сканирование таблицы . Сканирования таблицы не используют специальных индексов и могут способствовать чистке каждого полезного в кэшах памяти. В postgreSQL, например, Вы найдете, что он похож на это.

Seq Scan on my_table  (cost=0.00..15558.92 rows=620092 width=78)

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

6
задан BWA 16 January 2018 в 14:33
поделиться

3 ответа

imho здесь немного двоичная ситуация: и нет "однострочного". единственное решение, которое я вижу, - поместить элементы управления, которые не реализуют события, в контейнер .NET, который выполняет.

Когда какой-либо элемент управления получает щелчок, нормальное ожидаемое поведение состоит в том, что он станет активным элементом управления формы (к которому всегда можно получить доступ с помощью this.ActivceControl).

Но, в частности, если элемент управления, который вы щелкнули, захватывает мышь, что-то должно вызвать событие, поскольку .NET не реализует «всплытие» события (как это делает WPF).

Обычный способ справиться с расширением поведения любого запечатанного объекта или чего-то еще - написать метод расширения, и я обнаружил, что писать расширения для Control довольно легко, но я не знаю, поможет ли это вам в этом кейс. К сожалению, я сейчас за пределами моей родной страны, и у меня нет Visual Studio, с которой можно было бы поиграть.

Одна стратегия, которую вы можете использовать, чтобы определить, попадает ли данная точка в форме в границы любого элемента управления, - это перечислить области (границы) всех элементов управления в форме через 'forall Forms Control.Collection (this.Controls). Но если у вас есть перекрывающиеся элементы управления, тогда возникает проблема с несколькими элементами управления, которые могут содержать данную точку.

лучше всего, Билл

0
ответ дан 8 December 2019 в 16:04
поделиться

попробуйте следующее:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        AddMouseMoveHandler(this);
    }

    private void AddMouseMoveHandler(Control c)
    {
        c.MouseMove += MouseMoveHandler;
        if(c.Controls.Count>0)
        {
            foreach (Control ct in c.Controls)
                AddMouseMoveHandler(ct);
        }
    }

    private void MouseMoveHandler(object sender, MouseEventArgs e)
    {
        lblXY.Text = string.Format("X: {0}, Y:{1}", e.X, e.Y);
    }
}
8
ответ дан 8 December 2019 в 16:04
поделиться

Почему бы вам просто не использовать обработчики событий наведения указателя мыши элементов управления?

0
ответ дан 8 December 2019 в 16:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: