树状视图-在单击放置在NodeMouseClick事件上的消息弹出窗口上的取消时,无法恢复先前的选择

时间:2019-06-10 11:08:24

标签: c# .net treeview

考虑一个包含多个节点的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;
 }

但是上面的代码删除了所有节点上的选择,并不能满足需要。有什么办法可以保留以前的选择?

1 个答案:

答案 0 :(得分:0)

您可以在TreeView的{​​{1}}事件中执行此操作。

如果为BeforeSelect事件添加了一个事件处理程序,而该事件处理程序实际上只是BeforeSelect,那么您将永远无法选择一个节点,因为每次选择都会被取消。相反,您需要在e.Cancel = true事件内部显示您的消息框,并根据消息框的结果设置BeforeSelect

e.Cancel