Я включил сортировку с помощью этого:
Код: Выделить всё
private void Form1_Load(object sender, EventArgs e)
{
TreeView1.Sorted = true; // enabled auto sort here
}
Моя проблема возникает, когда я разрешаю пользователю переименовывать узел из созданного мной пункта контекстного меню. Древовидное представление не выполняет повторную сортировку автоматически.
В обработчике событий для моего пункта контекстного меню я добавил TreeViewDecks.Sort();:
Код: Выделить всё
private void renameToolStripMenuItem_Click(object sender, EventArgs e)
{
if (TreeView1.SelectedNode != null)
{
TreeView1.SelectedNode.BeginEdit();
TreeView1.Sort(); // tried to call sort here stopped the edit
}
}
Код: Выделить всё
private void treeView1_AfterLabelEdit(object sender,
System.Windows.Forms.NodeLabelEditEventArgs e)
{
if (e.Label != null)
{
if (e.Label.Length > 0)
{
if (e.Label.IndexOfAny(new char[]{'@', '.', ',', '!'}) == -1)
{
// Stop editing without canceling the label change.
e.Node.EndEdit(false);
}
else
{
/* Cancel the label edit action, inform the user, and
place the node in edit mode again. */
e.CancelEdit = true;
MessageBox.Show("Invalid tree node label.\n" +
"The invalid characters are: '@','.', ',', '!'",
"Node Label Edit");
e.Node.BeginEdit();
}
}
else
{
/* Cancel the label edit action, inform the user, and
place the node in edit mode again. */
e.CancelEdit = true;
MessageBox.Show("Invalid tree node label.\nThe label cannot be blank",
"Node Label Edit");
e.Node.BeginEdit();
}
}
TreeView1.Sorted = true; // tried to call sort here crashed app
}
Состояние свойства MSDN TreeView.Sorted:
Когда для параметра Sorted установлено значение true, объекты TreeNode сортируются в алфавитном порядке по значениям свойств Text. Всегда следует использовать BeginUpdate и EndUpdate для поддержания производительности при добавлении большого количества элементов в отсортированный TreeView. Когда текст существующего узла изменен, вы должны вызвать Sort, чтобы сортировать элементы.
Я пытаюсь сделать то, что сказано в последнем предложении, но не сказано, когда и где вызывать TreeView1.Sort();. Я пытался сделать это в обработчике событий контекстного меню и в обработчике AfterLabelEdit.