.NET Treeview не отправляет событие нажатия на пустой элемент управления - PullRequest
4 голосов
/ 08 ноября 2010

Я работаю с элементом управления .NET Treeview (не WPF, а обычными winforms), и у меня возникают проблемы с событием щелчка правой кнопкой мыши (или любого события щелчка), которое не запускается, когда внутри элемента управления нет узлов.Что касается ответа на другой поток в Stackoverflow, мой код обработчика событий выглядит следующим образом:

    private void tvTest_MouseClick(object sender, MouseEventArgs e)
    {
        // Note: this block below is needed so that the menu appears on
        // the correct node when right-clicking.
        if (e.Button == MouseButtons.Right)
        {
            tvTest.SelectedNode = tvTest.GetNodeAt(e.X, e.Y);
            if (tvTest.SelectedNode != null)
            {
                tvTestContextMenuStrip.Show(tvTest, e.Location);
            }
            else
            {
                tvTestContextMenuStrip.Show(tvTest, tvTest.Location);
            }
        }
    }

Проблема заключается в том, что, хотя это работает нормально, когда присутствуют узлы, если элемент управленияпуст, я не могу щелкнуть правой кнопкой мыши по элементу управления и выбрать «добавить узел», чтобы добавить в корень.Обработчик не вводится ВСЕ, так как я устанавливаю точку останова в самом начале, и кажется, что метод никогда не вводится.

Кто-нибудь знает, как заставить «что-то» произойти, когда Treeview пуст

Ответы [ 2 ]

5 голосов
/ 08 ноября 2010

Мне было любопытно, что именно эта проблема вы описали, поэтому я создал новый проект, затем добавил элемент управления Treeview в форму.

Затем я создал обработчик события MouseDown и заставил его показать сообщение, когда нажата правая кнопка.Если вам нужен код, который я с радостью предоставлю по запросу, исходя из того факта, что он содержит около 2 строк, а Visual Studio создала метод события, я не вижу смысла.

4 голосов
/ 21 августа 2012

Я не думаю, что это было явно указано выше, но оригинальный постер подразумевает, что он использует MouseClick из своего кода:

private void tvTest_MouseClick

Но ответ отвечает ответом на использование MouseDown:

Затем я создал обработчик события MouseDown ...

Мне удалось воспроизвести исходную проблему с помощью MouseClick. Кажется, что MouseClick вызывается только при нажатии на узел, но MouseDown вызывается независимо от того, находитесь ли вы на узле или нет - так что вы можете выбрать одно или другое в зависимости от желаемого поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...