Кликабельный URL-адрес в окне сообщения Winform?
-
11-09-2019 - |
Вопрос
Я хочу отобразить ссылку на помощь в окне сообщения.По умолчанию текст отображается в виде невыбираемой строки.
Решение
Один из вариантов — отобразить 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")
Важно отметить, что этот код не может быть в событии загрузки формы: кнопка «Справка» не откроет ссылку.
Другие советы
Вы можете использовать LinkLabel
контролировать самостоятельно Form
для этого.К сожалению, MessageBox
форму нельзя настроить таким образом, поэтому вам придется создать свою собственную Form
подражать MessageBox
для ваших целей.
MessageBox этого не сделает.Вам нужно будет либо использовать TaskDialog (представленный в Vista), либо создать свой собственный диалог.
--Редактировать--
Есть способы подделать диалоговое окно задачи в 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()
метод для отображения вашей формы со всеми добавленными в нее элементами управления.