将单词链接到Windows资源管理器c#

时间:2016-07-29 12:14:55

标签: c# windows-explorer

问题:如何制作链接按钮列表,以便当用户点击链接时,它会在Windows资源管理器中打开它。

所以我有一个富文本框,其中包含所有文件夹名称的列表,我有一个所有文件夹路径的列表。我希望能够单击文件夹名称并使用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时,它会使用该路径打开文件夹所在的Windows资源管理器。

非常感谢任何想法或帮助。

更新

我稍微更改了代码,现在它会显示,但我无法向下滚动。它似乎只是在表面上,因为我在富文本框中运行了一些东西,并且当链接停留在表面上时它可以滚动。

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,因为我认为它处于固定位置。

1 个答案:

答案 0 :(得分:0)

对于问题的第一部分,打开资源管理器,您可以对列表中每个项目的click事件(或整个列表区域的click事件,如我稍后描述)执行此操作:

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

(引用/斜杠是为了确保带空格的路径工作)

对于UI位,我以前从未见过LinkLabels,所以我不知道你是怎么走的,哈哈!我不确定你是使用WinForms还是WPF,但要么你通常想要使用像ListBox这样的东西(或者一个自定义控件,它的行为/看起来很像你想要的,但我猜你不是准备好了)。在WPF中,您可以将ListBox的ItemsSource设置为您的数据,将DisplayMemberPath设置为文本来自的任何属性(如果它只是字符串,那么只是不设置DisplayMemberPath)。然后,您可以设置一个事件来单击ListBox并通过检查选择了哪个项目并运行上面的代码来打开资源管理器来响应。

如果你想让你的UI使用最少的更改,尝试用按钮替换LinkLabels(如果你愿意,可以将它们设置为类似链接,至少在WPF中),因为它们的工作方式相同。