Хотите зафиксировать изменения для TreeView при редактировании узла (C #)?
Вопрос
Я играю с элементом управления TreeView от Microsoft и пытаюсь принудительно обновить некоторые данные при редактировании метки узла, аналогично updateData для сетки.
По сути, в моем редакторе у меня есть кнопка Сохранить и этот элемент управления TreeView:чего я хочу, так это когда я редактирую метку узла в TreeView, если я нажимаю на кнопку Сохранить, я хочу иметь возможность зафиксировать метку узла, которую я редактировал.
Решение
Редактирование метки узла выполняется с помощью текстового поля, и когда это текстовое поле теряет фокус, изменение имени будет зафиксировано в качестве новой метки для узла.Таким образом, если кнопка "Сохранить", на которую вы нажимаете, будет в фокусе, это вызовет автоматическое обновление, потому что текстовое поле потеряет фокус.
Если кнопка "Сохранить" не попадает в фокус, то необходимо обработать событие нажатия кнопки "Сохранить" и попросить дерево завершить любое текущее редактирование метки.Если у него нет метода / свойства, которое вы можете вызвать, чтобы запросить завершение редактирования метки, так что у вас есть два варианта.Если древовидное представление имеет фокус, то переместите фокус в другое место.В качестве альтернативы отключите / включите редактирование надписей еще раз...
treeView.LabelEdit = false;
treeView.LabelEdit = true;
Другие советы
Я приму этот ответ, даже если на самом деле он не задокументирован:есть ли у него такой метод или его нет?На самом деле вы не ответили на это, просто вернули вопрос мне.
Тем временем нашел такое же халтурное решение с принудительным переключением фокуса на какой-то другой элемент управления (не очень элегантный, но работает), хотя для меня это немного сложнее, поскольку я использую TreeView как часть UserControl.
Вам действительно нужна кнопка сохранить?
вы могли бы прослушать окончание редактирования узла - например, прослушав клавишу "return" в событии KeyDown в TreeView.если вы что-то редактируете (узнайте с помощью SelectedNode.isEditing), то вы знаете, что у вас есть фиксация.Затем вы можете зафиксировать это в своем материале dataupdate.Если вы хотите иметь возможность редактировать много разных узлов и сохранять их все в конце, то вам нужно добавить каждый отредактированный узел в какую-либо коллекцию, а затем, когда вы нажмете кнопку сохранить, выполнить итерацию по этой коллекции.