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