Интерактивный URL-адрес в окне сообщения Winform?

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


person Jeff    schedule 02.12.2009    source источник
comment
Похоже на две просьбы. Используйте форму вместо MessageBox.   -  person Hans Passant    schedule 02.12.2009


Ответы (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")

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

person schar    schedule 02.12.2009
comment
Спасибо, креативное решение, которого в моем случае будет достаточно. Действительно ценю это. (Проголосую за всех) - person Jeff; 02.12.2009
comment
Обратите внимание, что "keyword" будет добавлен после # к URL-адресу в качестве ссылки привязки. т.е. google.com#keyword - person Daniel Ballinger; 30.09.2014
comment
Нажатие на кнопку справки с этим кодом в С# ничего не делает - person reggaeguitar; 15.01.2016

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

person Jeff Yates    schedule 02.12.2009

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

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

person Brad Bruce    schedule 02.12.2009

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

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

person treaschf    schedule 02.12.2009

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

person Prasanth Louis    schedule 16.07.2018