URL cliccabili in una WinForm finestra di messaggio?
-
11-09-2019 - |
Domanda
Voglio visualizzare un link per aiutare in una finestra di messaggio. Per impostazione predefinita, il testo viene visualizzato come una stringa non selezionabile.
Soluzione
Una possibilità è visualizzare l'URL nella finestra di messaggio, insieme a un messaggio e fornire il pulsante di aiuto che ti porta a questo URL:
MessageBox.Show(
"test message",
"caption",
MessageBoxButtons.YesNo,
MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1,
0, '0 is default otherwise use MessageBoxOptions Enum
"http://google.com",
"keyword")
Importante notare questo codice non può essere nel caso di carico del modulo, il pulsante Guida non si apre il collegamento.
Altri suggerimenti
È possibile utilizzare il href="http://msdn.microsoft.com/en-us/library/system.windows.forms.linklabel.aspx" rel="noreferrer"> LinkLabel
controllo Form per questo. Purtroppo, la forma MessageBox
non può essere personalizzato in questo modo, quindi si avrebbe bisogno di creare il proprio Form
per imitare il MessageBox
per i vostri scopi.
MessageBox non lo farà. Potrete sia necessario utilizzare il TaskDialog (introdotto in Vista) o creare il proprio dialogo.
- Edit--
Ci sono modi di falsificare la finestra di attività su XP. Ci sono alcuni articoli su CodeProject.com che ho usato in passato.
È necessario creare il proprio modulo, al posto del MessageBox built-in, ed è possibile utilizzare un LinkLabel
su di esso.
Tuttavia il built-in MessageBox un pulsante? Potrebbe essere visualizzato tra i pulsanti.
Si potrebbe usare un po 'di codice personalizzato con LinkLabel
in questo modo:
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);
}
}
Dove hyperLinks
è una lista di stringhe per i link.
Poi per il vostro gestore 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");
}
}
Tenete a mente, questo è il vostro modulo con il controllo LinkLabel
aggiunto ad esso. Dovrete ereditare da Form
e utilizzare il metodo ShowDialog()
per visualizzare il modulo con tutti i controlli aggiunti ad esso.