Я постараюсь сделать это как можно короче.Я разрабатываю программное обеспечение на C # Windows Forms, которое включает элемент управления TreeView, который называется treeView1, в одной из его форм.LabelEdit включен, и я использую его событие AfterLabelEdit, поскольку многие люди могут знать, что на самом деле не происходит «После», ярлык редактируется.Я пытаюсь получить узлы новое имя.Но я не просто пытаюсь получить для строки этих узлов новую метку.(для этого обычно используется e.Label), но вместо этого мне нужно получить весь элемент управления TreeView после того, как метка этого конкретного узла будет отредактирована, потому что это требуется в качестве входных данных для созданного мной метода, который обновляет значения внутри DataGridView.LabelEdit запускается с помощью BeginEdit () в событии щелчка ToolStripMenuItem.Вот простой код для этого.
private void renameToolStripMenuItem_Click(object sender EventArgs e)
{
treeView1.SelectedNode.BeginEdit();
}
Когда я использую PopulateGirdView () после BeginEdit (), значение внутри таблицы данных не обновляется до следующего нажатия этой кнопки.
Это метод, который мне нужно реализовать после редактирования метки узла
public void PopulateGrid_Nodes(TreeView treeView)
{
dataGridView1.Rows.Clear();
BuildRows(TreeView treeView);
CreateText(TreeView treeView);
count = 0;
}
public void BuildRows(TreeNodeCollection nodes)
{
foreach(TreeNode child in nodes)
{
DataGridViewCell cell = new DataGridViewTextBoxCell();
DataGridViewRow row = new DataGridViewRow();
row.Cells.Add(cell);
if(child.IsExpanded == true)
{
BuildRows(child.Nodes);
}
}
}
int count = 0;
private void CreateText(TreeNodeCollection nodes)
{
foreach(TreeNode child in nodes)
{
dataGridView1.Rows[count].Cells[0].Value = child.Text.ToString();
dataGridView1.RefreshEdit();
count = count + 1;
if(child.IsExpanded == true)
{
BuildRows(child.Nodes);
}
}
}
Я также пытался использовать мой метод после BeginEdit, но он также не работал.