WinフォームメッセージボックスでクリッカブルURL?
-
11-09-2019 - |
質問
私は、メッセージボックスに支援するためのリンクを表示したいです。デフォルトでは、テキストは非選択文字列として表示されます。
解決
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")
このコードは、フォームのLoadイベントにすることはできません注意することが重要、ヘルプボタンは、リンクを開くことができません。
他のヒント
あなたは LinkLabel
のコントロールを使用することができますこのため、独自のForm
に。残念ながら、MessageBox
フォームは、このようにカスタマイズすることができないので、あなたの目的のためにForm
を模倣するために、独自のMessageBox
を作成する必要があります。
メッセージボックスはそれを行うことはありません。あなたは(Vistaで導入された)TaskDialogを使用するか、または独自のダイアログを作成する必要がありますどちらか。
- Edit--
XP上の偽のタスクダイアログの方法があります。私は過去に使用したCodeProject.comには、いくつかの記事があります。
あなたは、あなた自身のフォームを作成する必要が代わりに内蔵されたメッセージボックスの、そしてあなたはそれにLinkLabel
を使用することができます。
ただし、組み込みのメッセージボックスの[ヘルプ]ボタンのボタンの中に表示することができます。
あなたはこのような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()
メソッドを使用する必要があります。