Игнорировать элемент перед другим элементом при нажатии в Winform - PullRequest
0 голосов
/ 04 августа 2020

Это мой первый пост! Я не смог найти этот вопрос где-либо, хотя заранее прошу прощения, если он уже был задан.

Можно ли игнорировать событие щелчка на элементе в winform, хотя зарегистрировать это же событие для элемента позади Это? В качестве примера я создал настраиваемое раскрывающееся меню, состоящее из некоторых панелей и меток. Панели представляют собой фактические элементы, а метки служат только для того, чтобы показать пользователю, какой элемент они представляют.

Затем пользователь может щелкнуть элемент, чтобы выбрать его. На данный момент мне нужно вручную добавлять события щелчка как на мои панели, так и на ярлыки перед ними, иначе есть вероятность, что пользователь щелкнет фактическую ярлык, а не панель. Итак, еще раз, могу ли я сделать так, чтобы метка была «не кликабельной» и не регистрировала клик? Я также выделяю панели при наведении на них указателя мыши, я бы также хотел игнорировать наведение курсора на метки.

Вот изображение в качестве примера:

Изображение раскрывающегося списка с наведением курсора мыши на элемент

РЕДАКТИРОВАТЬ: Вот мой код, обрабатывающий выпадающее меню. Я чувствую, что повторяю себя много раз, хотя это работает.

В дизайнере (для каждой панели и ярлыка):

this.dropdownMeatLabel.Click += new System.EventHandler(this.dropdownMeatLabel_Click);
            this.dropdownMeatLabel.MouseEnter += new System.EventHandler(this.dropdownMeatLabel_MouseEnter);
            this.dropdownMeatLabel.MouseLeave += new System.EventHandler(this.dropdownMeatLabel_MouseLeave);

В классе сам (TryToStartTimer () просто делает выпадающий go снова вверх):

private void dropdownMeatPanel_Click(object sender, EventArgs e)
        {
            categoryText.Text = "Meat Options";
            TryToStartTimer();
        }

        private void dropdownMeatLabel_Click(object sender, EventArgs e)
        {
            categoryText.Text = "Meat Options";
            TryToStartTimer();
        }

        private void dropdownMeatPanel_MouseEnter(object sender, EventArgs e)
        {
            dropdownMeatPanel.BackColor = highlightColor;
        }

        private void dropdownMeatLabel_MouseEnter(object sender, EventArgs e)
        {
            dropdownMeatPanel.BackColor = highlightColor;
        }

        private void dropdownMeatPanel_MouseLeave(object sender, EventArgs e)
        {
            dropdownMeatPanel.BackColor = backColor;
        }

        private void dropdownMeatLabel_MouseLeave(object sender, EventArgs e)
        {
            dropdownMeatPanel.BackColor = backColor;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...