Отключить редактирование надписи действием щелчка мыши

#.net #winforms #listview #controls #treeview

#.net #winforms #просмотр списка #элементы управления #просмотр дерева

Вопрос:

Как я могу отключить редактирование надписи в элементах управления WinForms при нажатии на элемент управления, такой как ListView, TreeView и т.д.?, Не отключая возможность редактирования ( LabelEdit свойство)?

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

Нечто подобное происходит, когда вы меняете фокус между элементами управления одного и того же приложения, но в этой ситуации я останавливаю это поведение, очищая выбор элементов в момент ввода элемента управления.

Для первой описанной проблемы это бесполезно.

Комментарии:

1. Почему вы хотите отключить это, не отключая его? Отключение LabelEdit свойства — это именно то решение, которое вы ищете. Вы все еще можете редактировать метку с помощью кода, пользователь просто не сможет сделать это, щелкнув по ней.

2. XD @ Коди, ты прав, после того, как я написал вопрос и перешел в visual, мне приходит в голову решение, я отключаю labeledit по умолчанию, затем, если я нажимаю F2, я включаю его, а затем вызываю метод BeginEdit(). В обработчике события AfterLabelEdit я снова отключаю его.

3. Это имеет побочные эффекты, при этом собственный элемент управления Windows создается заново. Вы упустили некоторые очень важные детали из этого вопроса, предоставив пользователям SO мало шансов помочь вам. Почему бы вам просто не отказаться от редактирования ярлыка, в любом случае, это лаваш для пользователя. Просто отобразите текст выбранного узла в текстовом поле.

Ответ №1:

вы можете сделать это, обработав BeforeLabelEdit дерева

     private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
    {
//if you want to edit in some special case write your condition here
        e.CancelEdit = true;
    }