2017-05-29 29 views
0

我正在製作一個程序,用戶可以在其中修改遠程文件。我將所選文件(取決於某些預定義標準)放在listView中,但我只顯示文件名,而不是完整的文件路徑。在列表中隱藏/修改字符串

但是,我得到的問題是,當用戶雙擊一個項目,它應該打開另一個窗口來修改該項目。

private void listView1_DoubleClick(object sender, EventArgs e) 
{ 
    account = File.ReadAllLines("\\\\myremoteserver\\ftp\\"+listView1.SelectedItems[0].Text+".txt"); 
    Form3 passForm = new Form3(); 
    passForm.ShowDialog(); 
} 

private void Form2_Load(object sender, EventArgs e) 
{ 
    string[] files = Directory.GetFiles("\\\\myremotserver\\ftp\\","*.txt", System.IO.SearchOption.AllDirectories); 
    foreach (string s in files) 
    { 
     listView1.Items.Add(Path.GetFileNameWithoutExtension(s)); 
    } 
} 

的問題是,這些文件都在不同的子文件夾,所以如果我按原樣留下的代碼,它不會顯示該文件的正確內容。例如,該文件被稱爲test1.txt,它被放置在myremoteserver\ftp\testfolder\test1.txt中,但通過我的程序,它將嘗試在myremoteserver\ftp\test1.txt中找到該文件。

我在問的是,如果可以用這種方式修改listView,那麼完整的文件路徑總是被保存,但只有文件名被顯示?我不希望用戶看到文件的完整文件路徑,只是文件名。

+1

如果列表視圖中的項目有一個'.TAG你可以保存完整路徑 – EpicKip

+0

或更好的在listView1.Items.Add方法中添加一個類型化的項目並使用DisplayMember(https://msdn.microsoft.com/en-us/library/system.windows。 forms.listcontrol.displaymember(v = vs.110).aspx)只顯示列表視圖中的名稱。 – Digvijay

+0

我很可能會使用.tag屬性,謝謝你,它的工作原理,我只需交換'for'循環的'foreach'循環。 @Digvijay爲什麼會更好? – EInherjar

回答

0

使用的ListViewItem的

標籤屬性,以便創建項目...

foreach (string s in files) 
{ 
    ListViewItem lvi = new ListViewItem(Path.GetFileNameWithoutExtension(s)); 
    lvi.Tag = s; 
    listView1.Items.Add(lvi); 
} 

然後在事件處理程序...

account = File.ReadAllLines("\\\\myremoteserver\\ftp\\"+listView1.SelectedItems[0].Tag +".txt);