Как я и подозревал, проблема в том, что вы показываете MessageBox
на событии Click
. Когда отображается это окно сообщения, оно «захватывает» все вводимые данные (окна сообщений являются модальными диалоговыми окнами), и второй щелчок пользователя по TreeView
не распознается.
Ответ Ханса Пассанта уже содержит подробное объяснение того, как Windows определяет, является ли событие щелчка Click
или DoubleClick
, поэтому я не буду перефразировать это здесь.
Однако решение состоит в том, чтопросто: Удалите операторы MessageBox.Show
из ваших обработчиков событий, и все будет работать как положено. Вам нужно будет найти какой-то другой способ оповещения пользователя о выбранном узле (если это даже необходимо), но это окажется скрытым благословением.Окно сообщения, появляющееся при каждом нажатии на узел, не совсем дружественный пользовательский интерфейс.Для вашего конкретного сценария (по крайней мере, насколько я могу судить) нет необходимости в более сложных техниках, таких как таймер.
Это также представляет собой важный урок по отладке кода, включающего элементы пользовательского интерфейса Windows.Каждый раз, когда вы добавляете MessageBox
в микс, вы рискуете нарушить тонкую последовательность событий.Лучшая замена для замены - это, вероятно, вызов Debug.WriteLine
.