在Winform消息框中如何添加可点击的URL链接?

27

我想在消息框中显示一个帮助链接。默认情况下,该文字显示为不可选择的字符串。


2
听起来像是两个请求。使用表单而不是消息框。 - Hans Passant
5个回答

47

一种选择是在消息框中显示URL,同时提供一条消息和带你前往该URL的帮助按钮:

MessageBox.Show(
    "test message",
    "caption",
    MessageBoxButtons.YesNo,
    MessageBoxIcon.Information,
    MessageBoxDefaultButton.Button1,
    0, '0 is default otherwise use MessageBoxOptions Enum
    "http://google.com",
    "keyword")

需要注意的是,这段代码不能在表单的加载事件中使用,否则帮助按钮将无法打开链接。


1
谢谢,这个创意解决方案在我的情况下足够了。非常感谢。(给所有人点赞) - Jeff
1
请注意,"关键词"将作为锚点引用附加在URL后面的#号之后。例如:http://google.com#keyword - Daniel Ballinger
8
在C#中点击带有此代码的帮助按钮没有任何反应。 - reggaeguitar

5
你可以在自己的 Form 上使用LinkLabel 控件来实现这一功能。不幸的是,MessageBox 窗体无法以这种方式进行自定义,因此您需要创建自己的 Form 来模仿 MessageBox 以达到您的目的。

5

MessageBox不能做到这一点。你需要使用任务对话框(在Vista中引入)或创建自己的对话框。

--编辑--
有办法在XP上伪造任务对话框。CodeProject.com上有一些文章,我过去曾使用过。


2

您需要创建自己的表单,而不是使用内置的MessageBox,并且可以在其上使用LinkLabel。

但是,在内置的MessageBox上,可能会显示一个帮助按钮。


1
您可以使用自定义代码和 LinkLabel,如下所示:
        if (hyperLinks != null)
        {
            foreach (var link in hyperLinks)
            {
                var linkLabel = new LinkLabel();
                linkLabel.Text = link;
                linkLabel.Width = WhateverParentPanelYouHave.Width;
                linkLabel.Click += LabelClicked;
                WhateverParentPanelYouHave.Controls.Add(linkLabel);
             }
         }

这里的 hyperLinks 是您链接的字符串列表。

对于您的 LabelClicked 处理程序:

      private async void LabelClicked(object sender, EventArgs e)
      {
        var linkLabel = (LinkLabel) sender;
        var path = linkLabel.Text;
        try
        {
            await Task.Run(() => Process.Start($@"{path}"));
        }
        catch (Exception ex)
        {
            MessageBox.ShowMessage(ex.Message, @"An Error Has Occurred");
        }

      }

请记住,这是您自己的表单,其中添加了LinkLabel控件。您需要从Form继承并使用ShowDialog()方法来显示您的表单,并添加所有控件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接