我想在消息框中显示一个帮助链接。默认情况下,该文字显示为不可选择的字符串。
我想在消息框中显示一个帮助链接。默认情况下,该文字显示为不可选择的字符串。
一种选择是在消息框中显示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")
需要注意的是,这段代码不能在表单的加载事件中使用,否则帮助按钮将无法打开链接。
"关键词"
将作为锚点引用附加在URL后面的#号之后。例如:http://google.com#keyword - Daniel BallingerForm
上使用LinkLabel
控件来实现这一功能。不幸的是,MessageBox
窗体无法以这种方式进行自定义,因此您需要创建自己的 Form
来模仿 MessageBox
以达到您的目的。MessageBox不能做到这一点。你需要使用任务对话框(在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()
方法来显示您的表单,并添加所有控件。