Хотите зафиксировать изменения для TreeView при редактировании узла (C #)?

StackOverflow https://stackoverflow.com/questions/72556

  •  09-06-2019
  •  | 
  •  

Вопрос

Я играю с элементом управления TreeView от Microsoft и пытаюсь принудительно обновить некоторые данные при редактировании метки узла, аналогично updateData для сетки.

По сути, в моем редакторе у меня есть кнопка Сохранить и этот элемент управления TreeView:чего я хочу, так это когда я редактирую метку узла в TreeView, если я нажимаю на кнопку Сохранить, я хочу иметь возможность зафиксировать метку узла, которую я редактировал.

Это было полезно?

Решение

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

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

treeView.LabelEdit = false;
treeView.LabelEdit = true;

Другие советы

Я приму этот ответ, даже если на самом деле он не задокументирован:есть ли у него такой метод или его нет?На самом деле вы не ответили на это, просто вернули вопрос мне.

Тем временем нашел такое же халтурное решение с принудительным переключением фокуса на какой-то другой элемент управления (не очень элегантный, но работает), хотя для меня это немного сложнее, поскольку я использую TreeView как часть UserControl.

Вам действительно нужна кнопка сохранить?

вы могли бы прослушать окончание редактирования узла - например, прослушав клавишу "return" в событии KeyDown в TreeView.если вы что-то редактируете (узнайте с помощью SelectedNode.isEditing), то вы знаете, что у вас есть фиксация.Затем вы можете зафиксировать это в своем материале dataupdate.Если вы хотите иметь возможность редактировать много разных узлов и сохранять их все в конце, то вам нужно добавить каждый отредактированный узел в какую-либо коллекцию, а затем, когда вы нажмете кнопку сохранить, выполнить итерацию по этой коллекции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top