2013-09-30 23 views
0

我很新來C#。我正在使用C#填充文件資源管理器。我現在想做的是實現listView1_MouseDoubleClick()方法,這樣當我雙擊一個子文件夾時,當前的listView將被清除,然後它將顯示該子文件夾中的文件和文件夾(如Windows資源管理器所做的)。這裏是我的代碼:c#ListView - 得到「路徑不是合法的形式」,而實現MouseDoubleClick()方法

private void listView1_MouseDoubleClick(object sender, MouseEventArgs e) 
     { 
      for (int i = 0; i < listView1.Items.Count; i++) 
      { 
       if (listView1.Items[i].Selected == true) 
       { 
        string path = listView1.Items[i].Name; 
        comboBox1.Text = path; 
        listView1.Items.Clear(); 
        LoadFilesAndDir(path); 
       } 
      } 
     } 

    private void LoadFilesAndDir(string address) 
    { 
     DirectoryInfo di = new DirectoryInfo(address); 
     try 
     { 
      foreach (FileInfo fi in di.GetFiles()) 
      { 
       listView1.Items.Add(fi.Name); 
      } 
      try 
      { 
       foreach (DirectoryInfo listd in di.GetDirectories()) 
       { 
        listView1.Items.Add(listd.FullName, listd.Name, 0); 
       } 
      } 
      catch (Exception e1) 
      { 
      } 
     } 
     catch (Exception e1) 
     { 
     } 
    } 

但它未能運行。當我一步一步地調試這個錯誤時,我發現在這個聲明之後:path = listView1.Items[i].Name;path變量的值是""。所以我想這是錯誤的原因。但我不知道如何解決這個問題......你們能幫我解決這個問題嗎?非常感謝先進!

+0

使用Text屬性,而不是Name屬性。 –

回答

0

確保您聲明字符串「路徑」第一

string path = ""; 

然後插入此代碼:

private void listView1_MouseDoubleClick(object sender, EventArgs e) 
    { 
     for (int i = 0; i < listView1.Items.Count; i++) 
     { 
      if (listView1.Items[i].Selected == true) 
      { 
       path = Convert.ToString(listView1.Items[i]); 
       // This replaces the part "List View Item: {" 
       path = path.Replace("ListViewItem: {", ""); 
       // This replaces the part "}" 
       path = path.Replace("}", ""); 
       comboBox1.Text = path; 
       listView1.Items.Clear(); 
       LoadFilesAndDir(path); 
      } 
     } 
    } 

的代碼是有點長,但它的作品!

+0

路徑現在可以獲取文件夾的標籤,例如:path =「GAMES」。但我認爲這是沒有足夠的信息的下一個方法LoadFilesAndDir(路徑)來運行:( – sonlexqt

+0

不要這樣做。'ListViewItem'有一個'Text'屬性。 – SLaks

相關問題