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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top