Автоматическая сортировка дерева C# Winforms приводит к сбою моего приложенияC#

Место общения программистов C#
Anonymous
Автоматическая сортировка дерева C# Winforms приводит к сбою моего приложения

Сообщение Anonymous »

Я новичок в C# и создал приложение winform с TreeView.
Я включил сортировку с помощью этого:

Код: Выделить всё

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
}
}
Но это мешает мне редактировать метку, а просто сортирует дерево. Я удалил это и попытался изменить обработчик событий TreeView1_AfterLabelEdit(...), добавив TreeViewDecks.Sort(); в конец метода:

Код: Выделить всё

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.

Вернуться в «C#»