Я хочу отобразить ссылку на помощь в окне сообщения. По умолчанию текст отображается как невыбираемая строка.
Интерактивный URL-адрес в окне сообщения Winform?
Ответы (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")
Важно отметить, что этот код не может быть в событии загрузки формы, кнопка «Справка» не откроет ссылку.
"keyword"
будет добавлен после # к URL-адресу в качестве ссылки привязки. т.е. google.com#keyword
- person Daniel Ballinger; 30.09.2014
Вы можете самостоятельно использовать элемент управления LinkLabel
. Form
для этого. К сожалению, форма MessageBox
не может быть настроена таким образом, поэтому вам нужно будет создать свою собственную форму Form
, чтобы имитировать форму MessageBox
для ваших целей.
MessageBox этого не сделает. Вам нужно либо использовать TaskDialog (представленный в Vista), либо создать свой собственный диалог.
--Edit--
Есть способы подделать диалоговое окно задачи в XP. На CodeProject.com есть несколько статей, которыми я пользовался в прошлом.
Вы должны создать свою собственную форму вместо встроенного MessageBox, и вы можете использовать на ней LinkLabel
.
Однако на встроенном MessageBox среди кнопок может отображаться кнопка «Справка».
Вы можете использовать некоторый собственный код с 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()
для отображения формы со всеми добавленными к ней элементами управления.