Кликабельный URL в окне сообщения Winform? - PullRequest
23 голосов
/ 02 декабря 2009

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

Ответы [ 5 ]

37 голосов
/ 02 декабря 2009

Одним из вариантов является отображение 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")

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

5 голосов
/ 02 декабря 2009

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

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

5 голосов
/ 02 декабря 2009

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

2 голосов
/ 02 декабря 2009

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

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

1 голос
/ 16 июля 2018

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

...