Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#正在展开上选择treeview停止节点_C#_Winforms_Treeview - Fatal编程技术网

C#正在展开上选择treeview停止节点

C#正在展开上选择treeview停止节点,c#,winforms,treeview,C#,Winforms,Treeview,在我的应用程序中,我使用树视图。当用户单击[+]展开节点时,该节点将更改为选定节点。我怎样才能阻止这一切 private void tvFileStructure_BeforeExpand(object sender, TreeViewCancelEventArgs e) { if (e.Node.Text != "Network") { int unauthorisedAccessExceptions = 0;

在我的应用程序中,我使用树视图。当用户单击[+]展开节点时,该节点将更改为选定节点。我怎样才能阻止这一切

    private void tvFileStructure_BeforeExpand(object sender, TreeViewCancelEventArgs e)
    {
        if (e.Node.Text != "Network")
        {
            int unauthorisedAccessExceptions = 0;

            try
            {
                TreeNode newSelected = e.Node;
                DirectoryInfo nodeDirInfo = (DirectoryInfo)newSelected.Tag;

                TreeNode child = newSelected.FirstNode;
                if (child.Level < 3)
                {
                    while (child != null)
                    {
                        // Only try to populate if there aren't any children
                        if (child.FirstNode == null)
                        {
                            DirectoryInfo[] subDirs = ((DirectoryInfo)child.Tag).GetDirectories();
                            if (subDirs.Length != 0)
                            {
                                getDirectories(subDirs, child);
                            }
                        }

                        child = child.NextNode;
                    }
                }
            }
            catch (UnauthorizedAccessException)
            {
                unauthorisedAccessExceptions++;
            }

            if (unauthorisedAccessExceptions > 0)
            {
                MessageBox.Show("There were " + unauthorisedAccessExceptions.ToString() + " folder(s) that you do not have access to.", "Warning...", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            } 
        }
    }
private void tvFileStructure\u在展开之前(对象发送方,TreeViewCancelEventArgs e)
{
如果(e.Node.Text!=“网络”)
{
int UnauthorizedAccessExceptions=0;
尝试
{
TreeNode newSelected=e.节点;
DirectoryInfo nodeDirInfo=(DirectoryInfo)newSelected.Tag;
TreeNode子节点=newSelected.FirstNode;
如果(子级<3)
{
while(child!=null)
{
//只有在没有任何子对象时才尝试填充
if(child.FirstNode==null)
{
DirectoryInfo[]子目录=((DirectoryInfo)child.Tag).getDirectory();
如果(细分长度!=0)
{
获取目录(子目录、子目录);
}
}
child=child.NextNode;
}
}
}
捕获(未经授权的访问例外)
{
未经授权的访问异常++;
}
如果(未经授权的访问异常>0)
{
MessageBox.Show(“存在您无权访问的“+未经授权的AccessExceptions.ToString()+”文件夹。”,“警告…”,MessageBoxButtons.OK,MessageBoxIcon.Warning);
} 
}
}

正如Hans提到的,这不是标准WinForms树视图的默认行为。但是,您可以在BeforeSelect事件中取消更改选择:

void tvFileStructure_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
    if (iDontWantToSelectThis)
    {
        e.Cancel = true;
    }
}

winform的TreeView控件在默认情况下不执行此操作。后代码,实际上复制了问题。如果知道为什么编辑被否决,那就好了。这是我认为唯一相关的源代码,它相当容易阅读。我只在崩溃时体验过这一点,而不是在扩展时。这就是你面临的问题吗?如果是这样,我可以发布代码来禁用崩溃时的行为。