URL cliquable dans un Winform Boîte de message?
-
11-09-2019 - |
Question
Je veux afficher un lien pour aider dans une boîte de message. Par défaut, le texte est affiché sous la forme d'une chaîne non sélectionnable.
La solution
L'une des options est afficher l'URL dans la boîte de message, accompagné d'un message et de fournir le bouton d'aide qui vous amène à cette URL:
MessageBox.Show(
"test message",
"caption",
MessageBoxButtons.YesNo,
MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1,
0, '0 is default otherwise use MessageBoxOptions Enum
"http://google.com",
"keyword")
Il est important de noter que ce code ne peut pas être en cas de charge de la forme, le bouton d'aide ne sera pas ouvrir le lien.
Autres conseils
Vous pouvez utiliser le LinkLabel
contrôle vous-même pour cette Form
. Malheureusement, la forme MessageBox
ne peut pas être personnalisé de cette façon, vous devez créer votre propre Form
pour imiter le MessageBox
à vos besoins.
MessageBox ne le fera pas. Vous devrez soit utiliser le TaskDialog (introduit dans Vista) ou créer votre propre boîte de dialogue.
- Edit--
Il y a plusieurs façons de falsifier la boîte de dialogue de tâche sur XP. Il y a quelques articles sur CodeProject.com que je l'ai utilisé dans le passé.
Vous devez créer votre propre formulaire, au lieu du MessageBox intégré, et vous pouvez utiliser un LinkLabel
dessus.
Cependant le MessageBox intégré un bouton d'aide pourrait être affiché parmi les boutons.
Vous pouvez utiliser un code personnalisé avec LinkLabel
comme ceci:
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);
}
}
Où hyperLinks
est une liste de chaînes pour vos liens.
Ensuite, pour votre gestionnaire de 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");
}
}
Gardez à l'esprit, ceci est votre propre formulaire avec le contrôle de LinkLabel
ajouté. Vous devez hériter de Form
et utiliser la méthode ShowDialog()
pour afficher votre formulaire avec tous vos contrôles ajoutés.