如何在我點擊treeview生成的子節點(檔案text的檔案名)后,獲取到我點擊的檔案在檔案夾中的檔案路徑?
uj5u.com熱心網友回復:
string getPath(TreeNode tn){
string r = tn.Text;
while (tn.Parent != null)
{
tn = tn.Parent;
r = tn.Text + "/" + r;
}
return r;
}
uj5u.com熱心網友回復:
private void TreeView1_Click(System.Object sender, System.EventArgs e)
{
TreeNode tn;
string path;
path = getPath(tn);
using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
{
byte[] buffer = new byte[5242880] { };
int r1 = fsRead.Read(buffer, 0, buffer.Length);
TextBox1.Text = Encoding.UTF8.GetString(buffer, 0, r1);
}
}
private string getPath(TreeNode tn)
{
string r = tn.Text;
while (tn.Parent != null)
{
tn = tn.Parent;
r = tn.Text + "/" + r;
}
return r;
}
因為在學習,所以很多不懂,為什么我加上你的取全路徑的函式后給出如下資訊
警告 1 變數“tn”在賦值前被使用。可能會在運行時導致 null 參考例外。
uj5u.com熱心網友回復:
TreeView1_Click不是用這個。應該是用TreeView1_NodeMouseClick。法1:如果父節點是檔案路徑,子節點是檔案名
//添加:
TreeNode parentNode = new TreeNode(@"C:\\"); //父節點是檔案路徑
TreeNode childNode = new TreeNode(@"1.txt"); //子節點是檔案名
parentNode.Nodes.Add(childNode);
treeView1.Nodes.Add(parentNode);
//雙擊獲取
private void TreeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode childNode = e.Node;
if (childNode.Level == 1) //判定點擊的節點level是否是1,也就是是否是子節點
{
MessageBox.Show(childNode.Parent.Text + childNode.Text);
}
}
法2:給節點加一個Tag標簽
//添加
string fullPath = @"C:\\1.txt";
TreeNode childNode = new TreeNode(); //子節點是檔案名
childNode.Text = Path.GetFileName(fullPath);
childNode.Tag = fullPath;
treeView1.Nodes.Add(childNode);
//獲取
private void TreeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode childNode = e.Node;
if (File.Exists(childNode.Tag.ToString()))
{
MessageBox.Show(childNode.Tag.ToString());
}
}
uj5u.com熱心網友回復:
謝謝大神!我試試
uj5u.com熱心網友回復:
TreeNode tn;
->
TreeNode tn = treeView1.SelectedNode;
或者在 NodeClick里面
TreeNode tn = e.Node;
uj5u.com熱心網友回復:
string getPath(TreeNode tn)
{
string r = tn.Text;
while (tn.Parent != null)
{
tn = tn.Parent;
r = tn.Text + "/" + r;
}
return r;
}
private void TreeView1_Click(System.Object sender, System.EventArgs e)
{
TreeNode tn;
string path;
path = getPath(tn);
using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
{
byte[] buffer = new byte[5242880] { };
int r1 = fsRead.Read(buffer, 0, buffer.Length);
TextBox1.Text = Encoding.UTF8.GetString(buffer, 0, r1);
}
}
private string getPath(TreeNode tn)
{
string r = tn.Text;
while (tn.Parent != null)
{
tn = tn.Parent;
r = tn.Text + "/" + r;
}
return r;
}
因為在學習,所以很多不懂,為什么我加上你的取全路徑的函式后給出如下資訊
警告 1 變數“tn”在賦值前被使用。可能會在運行時導致 null 參考例外。
TreeNode tn;
->
TreeNode tn = treeView1.SelectedNode;
或者在 NodeClick里面
TreeNode tn = e.Node;
好的,謝謝大神,晚上回家試試,非常感謝您的再次解疑
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/38150.html
標籤:C#
下一篇:byte[]時間轉換
