Свойство TopNode TreeView показывает нулевое значение, и возникла исключительная ситуация c# - PullRequest
0 голосов
/ 03 февраля 2020

img1

img-1

При просмотре дерева произошла странная проблема. Как вы можете видеть на изображении выше, свойство TopNode получает нулевое значение. но в то же время, если я разверну loc_treeview1, я смогу увидеть TopNode там с необходимыми вещами (как показано ниже img-2) img2 img-2

И странно то, что когда я снова проверяю TopNode, я вижу там необходимые вещи. (Как в img-3) img3

img-3

Почему это происходит, какие-либо объяснения?

Вот мой код Я передаю путь при нажатии кнопки для загрузки дерева. Узлы дерева успешно загружаются с пути, но когда я пытаюсь получить TopNode из treeView1, он показывает ноль. И возникает исключение.

class RecentProjects:

private void btnEditRecent_Click(object sender, EventArgs e)
{
    if(RecentProjects.fullPath == "")
    {
        MessageBox.Show("Please select a file before edit or send.");
    }
    else
    {
        Form1 form1 = new Form1();

        //Here passing path for loading tree view from
        form1.BtnDirectoryPathClick("load_recent_dir", RecentProjects.fullPath);
        form1.ShowDialog();
    }
}

class Form1:

public void BtnDirectoryPathClick(string btnClickedFrom, string selectionPath)
{
    if(btnClickedFrom == "load_dir")
    {
        LoadDirCall(selectionPath);
    }
    if(btnClickedFrom == "load_recent_dir")
    {
        LoadDirCall(selectionPath);
    }
}

public void LoadDirCall(string selectedPath)
{
    recentLoadedDirPath = selectedPath;
    txtDirectoryPath.Text = selectedPath;
    loadedDirectoryPath = txtDirectoryPath.Text;
    // Setting Inital Value of Progress Bar
    progressBar1.Value = 0;

    // Clear All Nodes if Already Exists
    treeView1.Nodes.Clear();

    toolTip1.ShowAlways = true;

    if (txtDirectoryPath.Text != "" && Directory.Exists(txtDirectoryPath.Text))
    {
        this.AutoResizeWindow(749, 513);
        LoadDirectory(txtDirectoryPath.Text);
        SetAllCheckedTrue(treeview1);
    }
    else
        MessageBox.Show("Select Directory!!");
}

public void LoadDirectory(string directoryPath)
{
    //Setting ProgressBar Maximum Value
    progressBar1.Maximum = Directory.GetFiles(directoryPath, "*.*", SearchOption.AllDirectories).Length + Directory.GetDirectories(directoryPath, "*.*", SearchOption.AllDirectories).Length;

    progressBar1.Maximum = GetProgressBarCount(directoryPath);

    DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath);
    this.treeNodeVar1 = treeView1.Nodes.Add(directoryInfo.Name);

    //this.shortName = Path.get
    this.shortName = directoryInfo.Name;

    Form1.rootDirAbsPath = directoryInfo.FullName;

    this.treeNodeVar1.Tag = directoryInfo.FullName;
    this.treeNodeVar1.SelectedImageIndex = 0;
    this.treeNodeVar1.ImageIndex = 0;

    LoadFiles(directoryPath, this.treeNodeVar1);
    LoadSubDirectories(directoryPath, this.treeNodeVar1);
}

private void LoadFiles(string subDirectoryLoc, TreeNode subTreeNodeLoc)
{
    string[] Files = Directory.GetFiles(subDirectoryLoc, "*.*");

    // Loop through them to see files
    foreach (string file in Files)
    {
        FileInfo fileInfo = new FileInfo(file);
        TreeNode subTreeNodeFile = subTreeNodeLoc.Nodes.Add(fileInfo.Name);
        subTreeNodeFile.Tag = fileInfo.FullName;
        subTreeNodeFile.SelectedImageIndex = 1;
        subTreeNodeFile.ImageIndex = 1;
        UpdateProgress();
    }
}

private void UpdateProgress()
{
    if (progressBar1.Value < progressBar1.Maximum)
    {
        progressBar1.Value++;
        int percent = (int)(((double)progressBar1.Value / (double)progressBar1.Maximum) * 100);
        progressBar1.CreateGraphics().DrawString(percent.ToString() + "%", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(progressBar1.Width / 2 - 10, progressBar1.Height / 2 - 7));

        Application.DoEvents();
    }

}

private void LoadSubDirectories(string directoryPath, TreeNode td)
{
    // Get all subdirectories
    string[] subdirectoryEntries = Directory.GetDirectories(directoryPath);

    // Loop through them to see if they have any other subdirectories
    foreach (string subdirectory in subdirectoryEntries)
    {
        DirectoryInfo directoryInfo = new DirectoryInfo(subdirectory);
        if (directoryInfo.Name.Contains(".git"))
        {
            continue;
        }
        TreeNode subTreeNode = td.Nodes.Add(directoryInfo.Name);
        subTreeNode.SelectedImageIndex = 0;
        subTreeNode.ImageIndex = 0;
        subTreeNode.Tag = directoryInfo.FullName;
        LoadFiles(subdirectory, subTreeNode);
        LoadSubDirectories(subdirectory, subTreeNode);
        UpdateProgress();
    }
}

private void SetAllCheckedTrue(TreeView treeView1)
{
    try
    {
        //Here I am getting an exception, Null reference
        var topnode = treeView1.TopNode;
        projectRootName = topnode.Text;
        Directory.CreateDirectory(projConfigPath);

        this.txtConfigfileExists = File.Exists(projConfigPath + $@"\{projectRootName}.txt");
        if (txtConfigfileExists)
        {
            this.existingFileData = File.ReadAllText(projConfigPath + $@"\{projectRootName}.txt").Split('\n');
        }
        foreach (TreeNode treeNode in treeView1.Nodes)
        {
            SetSubNodesCheckedTrue(treeNode, true);
        }
    }
    catch(Exception ex)
    {

    }
}
...