在这里,我使用 TextBox 将节点名称限制为最多 60 个字符,这会导致标签编辑事件后未触发的问题
/// <summary>
/// This event use to restrict user input up to 60 Characters.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tvFolders_BeforeLabelEdit(object sender, NodeExLabelEditEventArgs e)
{
txtFolderName.MaxLength = 60;
e.CancelEdit = true;
TreeNodeEx selectedNode = tvFolders.SelectedNode;
txtFolderName.Visible = true;
e.Node.Text =txtFolderName.Text = selectedNode.Text;
txtFolderName.SelectAll();
txtFolderName.BringToFront();
txtFolderName.Left = tvFolders.Left + selectedNode.Bounds.Left;
txtFolderName.Top = tvFolders.Top + selectedNode.Bounds.Top;
txtFolderName.Focus()
}
以下事件未被调用,其中包含我的业务逻辑,如果我使用TextBox
将用户输入限制为最多 60 个字符,则不会触发该事件
private void tvFolders_AfterLabelEdit(object sender, Framework.Utilities.Controls.ExtendedTreeView.NodeExLabelEditEventArgs e)
{
if(e.Label.Length >60)
{
MessageBox.Show("Please enter Less than 60 Characters in folder name.", "New Folder", MessageBoxButtons.OK);
e.CancelEdit = true;
this.tvFolders.SelectedNode = e.Node;
}
else if(IsDuplicateFolderName(e.Node, e.Label, (DataRowView)e.Node.DataRow))
{
MessageBox.Show("This folder name already exists. Please provide a new name.", "New Folder", MessageBoxButtons.OK);
e.CancelEdit = true;
this.tvFolders.SelectedNode = e.Node;
SaveNewNode(e, true);
}
else if(e.Label.Length == 0)
{
MessageBox.Show("Folder name cannot be empty", "New Folder", MessageBoxButtons.OK);
e.CancelEdit = true;
this.tvFolders.SelectedNode = e.Node;
}
}