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