Вопрос

Я хочу отобразить ссылку на помощь в окне сообщения.По умолчанию текст отображается в виде невыбираемой строки.

Это было полезно?

Решение

Один из вариантов — отобразить 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() метод для отображения вашей формы со всеми добавленными в нее элементами управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top