2016-07-29 35 views
0

問:如何創建鏈接按鈕列表,以便當用戶單擊某個鏈接時,它將在Windows資源管理器中將其打開。將單詞鏈接到Windows資源管理器c#

所以我有一個富文本框,其中包含所有文件夾名稱的列表,我有一個所有文件夾路徑的列表。我希望能夠點擊文件夾名稱並使用在Windows資源管理器中正確文件夾的路徑進行鏈接。

   LinkLabel link = new LinkLabel(); 
       link.Text = transfer2; 
       //link.Text = "something"; 
       link.Name = dirName; 
       link.LinkClicked += new LinkLabelLinkClickedEventHandler(this.link_LinkClicked); 
       LinkLabel.Link data = new LinkLabel.Link(); 
       data.LinkData = @"C:\"; 
       link.Links.Add(data); 
       link.AutoSize = true; 
       link.Location = 
       this.Display_Rich_Text_Box.GetPositionFromCharIndex(this.Display_Rich_Text_Box.TextLength); 
       this.Display_Rich_Text_Box.Controls.Add(link); 
       this.Display_Rich_Text_Box.AppendText(link.Text + " "); 
       this.Display_Rich_Text_Box.SelectionStart = this.Display_Rich_Text_Box.TextLength; 

我以這段代碼開始。我正在使用foreach語句來獲取文件夾名稱和路徑。我試圖更改鏈接的名稱,以便用戶看到他們正在點擊文件夾A,但是當您單擊文件夾A時,它會使用路徑打開文件夾所在的窗口資源管理器。

任何想法或幫助將不勝感激。

更新

我改變了代碼一點,所以現在它會顯示,但我不能向下滾動。它似乎只在表面上,因爲我在富文本框中運行了一些東西,並且在鏈接停留在表面上時它是可滾動的。

enter image description here我還添加了一張圖片,以便您可以看到問題所在。我滾動一點,所以很容易看到。

   LinkLabel link = new LinkLabel(); 
       link.Text = dirName; 
       //link.Text = "something"; 
       link.Name = transfer2; 
       //link.LinkClicked += new LinkLabelLinkClickedEventHandler(this.link_LinkClicked); 
       LinkLabel.Link data = new LinkLabel.Link(); 
       data.LinkData = @"C:\"; 
       link.Links.Add(data); 
       link.AutoSize = true; 
       link.Location = 
       this.Display_Rich_Text_Box.GetPositionFromCharIndex(this.Display_Rich_Text_Box.TextLength); 
       this.Display_Rich_Text_Box.Controls.Add(link); 
       this.Display_Rich_Text_Box.AppendText(link.Text + "\n"); 
       this.Display_Rich_Text_Box.SelectionStart = this.Display_Rich_Text_Box.TextLength; 

更新:我想基本上是做超鏈接列表,所以我不認爲,因爲我覺得它是在一個固定的位置,我可以使用LinkLabel的。

+0

是你的問題得到它打開資源管理器的路徑,或者是顯示的鏈接/滾動/等問題?有些不清楚實際問題是什麼。 – Yushatak

+0

所以我有通往Windows資源管理器的路徑。我似乎無法讓它打開使用該路徑的Windows資源管理器或顯示應該在那裏的正確數量的鏈接按鈕。 (我想能夠通過它們滾動)這是否更好地回答你的問題? – Tasha

回答

0

對於你的問題的第一部分,打開資源管理器,你可以這樣做對列表中的每個項目單擊事件(或整個列表區域的單擊事件,我後來描述):

System.Diagnostics.Process.Start("explorer.exe", "\"" + path + "\""); 

(報價/斜線的事情是確保路徑與空間工作)

對於UI位,我也從來沒有見過LinkLabels,所以我不知道你的道路上如何得到, 大聲笑!我不確定你是使用WinForms還是WPF,但是你通常要使用像ListBox這樣的東西(或者一個自定義控件的行爲/看起來正是你想要的,但是我猜你不是準備好了)。在WPF中,您可以將ListBox的ItemsSource設置爲您的數據和DisplayMemberPath以指定文本的任何屬性(如果它只是字符串,則不設置DisplayMemberPath)。然後,您將設置一個點擊ListBox的事件,並通過檢查選擇哪個項目並運行上面的代碼來打開Explorer來響應該事件。

如果你想讓你的UI在最小的變化下工作,試着用Buttons替換LinkLabels(至少在WPF中可以將它們設置爲鏈接,至少在WPF中),因爲這些工作方式相同。

+0

(我目前使用WinForms)所以我不太在意外觀我只是不知道如何製作一長串按鈕,所以我可以滾動。這或多或少是剩下的問題。我至少需要50個按鈕,我原本想通過富文本框鏈接它,這就是我如何開始鏈接標籤(鏈接標籤大部分只是按鈕,只是格式有點不同) – Tasha

+0

您可能想要一個ListBox (正如我上面提到的,請參閱http://www.dotnetperls.com/listbox),並且您可能希望對數據中的目錄執行foreach循環,並且每個循環都自動向ListBox添加項目。 – Yushatak

+0

實際上這很有效。並使現在很有意義 – Tasha

相關問題