将单词链接到 windows Explorer c#

Linking words to windows Explorer c#

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

所以我有一个包含所有文件夹名称列表的富文本框,并且我有一个所有文件夹路径的列表。我希望能够单击文件夹名称并使用 windows 资源管理器中正确文件夹的路径对其进行 link 编辑。

                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 语句来获取文件夹名称和路径。我试图更改 link 的名称,因此用户会看到他们正在单击文件夹 A,但是当您单击文件夹 A 时,它会使用路径打开文件夹所在的 windows 资源管理器来自.

任何想法或帮助将不胜感激。

更新

我稍微更改了代码,现在可以显示了,但我无法向下滚动。它似乎只在表面上,因为我 运行 富文本框中的内容并且它是可滚动的,而 link 停留在表面上。

我也加了一张图,大家看看是什么问题。我滚动了一下,这样很容易看到。

                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;

更新:我试图制作一个 hyperlinks 的列表,所以我认为我不能使用 linklabel,因为我认为它处于固定位置。

对于你的问题的第一部分,打开资源管理器,你可以在列表中每个项目的点击事件(或整个列表区域的点击事件,我稍后描述)上这样做:

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

(quote/slash 是为了确保带空格的路径有效)

对于 UI 位,我以前从未见过 LinkLabels,所以我不知道你是怎么走上这条路的,哈哈!我不确定您使用的是 WinForms 还是 WPF,但在任何一种情况下,您通常都想使用类似 ListBox 的东西(或 behaves/looks 正是您想要的自定义控件,但我猜您是'为此做好准备)。在 WPF 中,您可以将 ListBox 的 ItemsSource 设置为您的数据,并将 DisplayMemberPath 设置为任何 属性 文本来源(如果它只是字符串,则不要设置 DisplayMemberPath)。然后,您将设置一个用于单击 ListBox 的事件,并通过检查选中的项目和 运行 上面的代码来打开资源管理器来响应该事件。

如果您想让 UI 以最小的更改工作,请尝试将 LinkLabel 替换为按钮(如果需要,您可以将它们设置为看起来像链接,至少在 WPF 中是这样),因为它们的工作原理相同方式。