【问题标题】:Clickable URL in a Winform Message Box?Winform消息框中的可点击URL?
【发布时间】:2010-12-22 11:15:18
【问题描述】:

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

【问题讨论】:

  • 听起来像是两个请求。使用表单而不是 MessageBox。

标签: vb.net winforms url messagebox clickable


【解决方案1】:

一个选项是在消息框中显示 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")

需要注意此代码不能在表单的加载事件中,帮助按钮不会打开链接。

【讨论】:

  • 谢谢,创造性的解决方案在我的情况下就足够了。真的很感激。 (给大家点赞)
  • 请注意,"keyword" 将附加在 URL 的 # 之后作为锚引用。 IE。 google.com#keyword
  • 在 C# 中使用此代码单击帮助按钮没有任何作用
【解决方案2】:

为此,您可以在自己的Form 上使用LinkLabel 控件。不幸的是,MessageBox 表单无法以这种方式自定义,因此您需要创建自己的 Form 来模仿 MessageBox 以达到您的目的。

【讨论】:

    【解决方案3】:

    MessageBox 不会这样做。您需要使用 TaskDialog(在 Vista 中引入)或创建自己的对话框。

    --编辑--
    有一些方法可以伪造 XP 上的任务对话框。 CodeProject.com 上有几篇我以前用过的文章。

    【讨论】:

      【解决方案4】:

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

      但是在内置 MessageBox 上,可以在按钮之间显示帮助按钮。

      【讨论】:

        【解决方案5】:

        您可以像这样使用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() 方法来显示您的表单并添加所有控件。

        【讨论】:

          猜你喜欢
          • 2023-03-09
          • 2021-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多