Treeview - 在放置在 NodeMouseClick 事件上的弹出消息上单击取消时无法恢复之前的选择
Treeview - Unable to restore previous selection on clicking cancel on a message pop up that is placed on a NodeMouseClick event
考虑一个包含多个节点的 TreeView 控件。选择节点时,某些信息会显示在文本框中。可以修改和保存此信息。意外地,如果用户在没有保存的情况下导航到不同的节点,则会显示一个弹出窗口,要求用户保存或取消操作。如果单击取消,选择应保留在先前选择的节点上而不是新节点上。显示弹出的逻辑写在 TreeView 的 NodeMouseClick() 事件中。有什么办法可以做到这一点?下面是示例代码片段。
private void TreeView1_NodeMouseClick(object sender,
TreeNodeMouseClickEventArgs e)
{
DialogResult dr = MessageBox.Show("Cancel
Clicked......!!!","Information", MessageBoxButtons.OKCancel,
MessageBoxIcon.Information);
if(dr == DialogResult.Cancel)
{
//Need to handle previous node selection
}
}
NodeMouseClick() 事件似乎没有提供任何信息来取消该事件。我已经尝试使用以下代码片段取消 TreeView 的 BeforeSelect() 事件。
private void TreeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
e.Cancel = true;
}
但是上面的代码删除了所有节点上的选择,不能满足需要。有什么办法可以保留之前的选择吗?
您可以在 TreeView
的 BeforeSelect
活动中执行此操作。
如果您为 BeforeSelect
事件添加了一个事件处理程序,实际上只是 e.Cancel = true
您将永远无法 select 一个节点,因为 selection 会每次都被取消。相反,您需要在 BeforeSelect
事件中显示消息框,并根据消息框的结果设置 e.Cancel
。
private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
if (DataIsDirty())
{
if (MessageBox.Show(
"Unsaved changes detected. Press OK to switch nodes and lose the change, or Cancel to stay on the current node.",
"Unsaved Changes Detected",
MessageBoxButtons.OKCancel) == DialogResult.Cancel)
{
e.Cancel = true;
}
}
}
考虑一个包含多个节点的 TreeView 控件。选择节点时,某些信息会显示在文本框中。可以修改和保存此信息。意外地,如果用户在没有保存的情况下导航到不同的节点,则会显示一个弹出窗口,要求用户保存或取消操作。如果单击取消,选择应保留在先前选择的节点上而不是新节点上。显示弹出的逻辑写在 TreeView 的 NodeMouseClick() 事件中。有什么办法可以做到这一点?下面是示例代码片段。
private void TreeView1_NodeMouseClick(object sender,
TreeNodeMouseClickEventArgs e)
{
DialogResult dr = MessageBox.Show("Cancel
Clicked......!!!","Information", MessageBoxButtons.OKCancel,
MessageBoxIcon.Information);
if(dr == DialogResult.Cancel)
{
//Need to handle previous node selection
}
}
NodeMouseClick() 事件似乎没有提供任何信息来取消该事件。我已经尝试使用以下代码片段取消 TreeView 的 BeforeSelect() 事件。
private void TreeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
e.Cancel = true;
}
但是上面的代码删除了所有节点上的选择,不能满足需要。有什么办法可以保留之前的选择吗?
您可以在 TreeView
的 BeforeSelect
活动中执行此操作。
如果您为 BeforeSelect
事件添加了一个事件处理程序,实际上只是 e.Cancel = true
您将永远无法 select 一个节点,因为 selection 会每次都被取消。相反,您需要在 BeforeSelect
事件中显示消息框,并根据消息框的结果设置 e.Cancel
。
private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
if (DataIsDirty())
{
if (MessageBox.Show(
"Unsaved changes detected. Press OK to switch nodes and lose the change, or Cancel to stay on the current node.",
"Unsaved Changes Detected",
MessageBoxButtons.OKCancel) == DialogResult.Cancel)
{
e.Cancel = true;
}
}
}