URL clicável em uma caixa de mensagem Winform?
-
11-09-2019 - |
Pergunta
Eu quero mostrar um link para ajuda em uma caixa de mensagem. Por padrão, o texto é exibido como uma string não-selecionável.
Solução
Uma opção é exibir a URL na caixa de mensagem, juntamente com uma mensagem de e fornecer o botão de ajuda que leva você para que url:
MessageBox.Show(
"test message",
"caption",
MessageBoxButtons.YesNo,
MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1,
0, '0 is default otherwise use MessageBoxOptions Enum
"http://google.com",
"keyword")
Importante notar este código não pode estar no evento de carregamento do formulário, no botão Ajuda não vai abrir o link.
Outras dicas
Você pode usar o LinkLabel
controle em seu próprio Form
para isso. Infelizmente, a forma MessageBox
não pode ser personalizado, desta forma, assim que você precisa para criar seu próprio Form
para imitar o MessageBox
para seus propósitos.
MessageBox não vai fazer isso. Você nem precisa usar o TaskDialog (introduzido no Vista) ou criar seu próprio diálogo.
- Edit--
Existem maneiras de falsificar o diálogo de tarefas no XP. Existem alguns artigos sobre CodeProject.com que eu usei no passado.
Você tem que criar seu próprio formulário, em vez do built-in MessageBox, e você pode usar um LinkLabel
nele.
No entanto sobre o built-in MessageBox um botão Ajuda pode ser exibida entre os botões.
Você pode usar algum código personalizado com LinkLabel
assim:
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);
}
}
Onde hyperLinks
é uma lista de strings para seus links.
Em seguida, para o seu manipulador 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");
}
}
Tenha em mente, esta é a sua própria forma com o controle LinkLabel
adicionado a ele. Você vai ter que herdam Form
e usar o método ShowDialog()
para exibir o formulário com todos os seus controles adicionados a ele.