Кликабельный URL-адрес в окне сообщения Winform?


Я хочу отобразить ссылку на помощь в окне сообщения. По умолчанию текст отображается в виде невыбираемой строки.

5 22

5 ответов:

Один из вариантов-отобразить 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")

Важно отметить, что этот код не может быть в событии загрузки формы, кнопка Help не откроет ссылку.

Вы можете использовать LinkLabel контролируйте это самостоятельно Form. К сожалению, форма MessageBox не может быть настроена таким образом, поэтому вам нужно будет создать свой собственный Form, чтобы имитировать MessageBox для ваших целей.

MessageBox этого не сделает. Вам нужно будет либо использовать TaskDialog (введенный в Vista), либо создать свой собственный диалог.

-- Edit--
Есть способы подделать диалог задач на XP. Есть несколько статей, посвященных CodeProject.com этим я пользовался в прошлом.

Вы должны создать свою собственную форму, вместо встроенной MessageBox, и вы можете использовать LinkLabel на нем.

Однако на встроенном MessageBox среди кнопок может отображаться кнопка Help.

Вы можете использовать некоторый пользовательский код с 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() для отображения формы со всеми добавленными в нее элементами управления.