web-dev-qa-db-ja.com

Winformメッセージボックスのクリック可能なURL?

メッセージボックスに役立つリンクを表示したい。デフォルトでは、テキストは選択できない文字列として表示されます。

25
Jeff

1つのオプションは、メッセージボックスに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")

このコードをフォームのロードイベントに含めることはできません。[ヘルプ]ボタンはリンクを開きません。

40
schar

これには、 LinkLabel コントロールを独自のFormで使用できます。残念ながら、MessageBoxフォームはこの方法でカスタマイズできないため、目的に応じてFormを模倣するために独自のMessageBoxを作成する必要があります。

5
Jeff Yates

MessageBoxはそれを行いません。 TaskDialog(Vistaで導入)を使用するか、独自のダイアログを作成する必要があります。

-編集-
XPでタスクダイアログを偽造する方法があります。過去に使用したCodeProject.comの記事がいくつかあります。

5
Brad Bruce

組み込みのメッセージボックスではなく、独自のフォームを作成する必要があり、そのフォームでLinkLabelを使用できます。

ただし、組み込みのメッセージボックスでは、ボタンの間にヘルプボタンを表示できます。

2
treaschf

次のように、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()メソッドを使用して、すべてのコントロールが追加されたフォームを表示する必要があります。

1
Prasanth Louis