img-1
При просмотре дерева произошла странная проблема. Как вы можете видеть на изображении выше, свойство TopNode
получает нулевое значение. но в то же время, если я разверну loc_treeview1
, я смогу увидеть TopNode
там с необходимыми вещами (как показано ниже img-2) img-2
И странно то, что когда я снова проверяю TopNode
, я вижу там необходимые вещи. (Как в img-3)
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)
{
}
}