Excepción no controlada cuando se hace clic en Linklabel C # Winform
Pregunta
Recibo una extraña excepción no controlada cuando hago clic en la etiqueta del enlace que debería abrir un formulario. Intenté poner el código en el controlador de eventos linklabel_click en el bloque try-catch, pero aún recibo el siguiente error.
Vea el final de este mensaje para detalles sobre cómo invocar justo a tiempo (JIT) depuración en lugar de este diálogo caja.
************** Texto de excepción ************** System.ComponentModel.Win32Exception: El sistema no puede encontrar el archivo especificado en System.Diagnostics.Process.StartWithShellExecuteEx (ProcessStartInfo startInfo) en System.Diagnostics.Process.Start ()
a System.Diagnostics.Process.Start (ProcessStartInfo startInfo) en System.Diagnostics.Process.Start (String fileName) en InfoCapsule.FrmLink.llblHelp_LinkClicked (Object remitente, LinkLabelLinkClickedEventArgs comer System.Windows.Forms.LinkLabel.OnLinkClicked (LinkLabelLinkClickedEventArgs comer System.Windows.Forms.LinkLabel.OnMouseUp (MouseEventArgs comer System.Windows.Forms.Control.WmMouseUp (Mensaje & amp; m, botón MouseButtons, clics Int32) a System.Windows.Forms.Control.WndProc (Mensaje & amp; m) en System.Windows.Forms.Label.WndProc (Mensaje & amp; m) en System.Windows.Forms.LinkLabel.WndProc (Mensaje & amp; msg) en System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Mensaje & amp; m) en System.Windows.Forms.Control.ControlNativeWindow.WndProc (Mensaje & amp; m) en System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
El código para linklabel_click es el siguiente.
private void llblHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
try
{
refFrmHelp = new FrmHelp(this);
refFrmHelp.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
Código dentro de FrmHelp
String sitePath = null;
try
{
sitePath = "file:///" + Application.StartupPath + "\\help.html";
//sitePath = sitePath.Replace("\\", "/");
MessageBox.Show(sitePath);
Uri path = new Uri(sitePath);
wbHelp.Navigate(path);
}
catch (UriFormatException ex)
{
MessageBox.Show(ex.ToString() + "\nSite Path: " + sitePath);
return false;
}
catch (Exception exp)
{
MessageBox.Show(exp.ToString() + "\nSite Path: " + sitePath);
return false;
}
¿Pueden ayudarme en la depuración?
Solución
Acabo de probar esto con un control WebBrowser, y puede navegar a un archivo local sin molestarse en absoluto con la clase Uri. Este código debería funcionar para usted:
string sitePath = Application.StartupPath + @"\help.html";
wbHelp.Navigate(sitePath);
Los Uri son algo extravagantes a veces, aunque nunca los he visto lanzar una excepción incansable antes (aunque podría ser el WebBrowser lanzando la excepción, no lo sé).
Cuando ejecute este código, asegúrese de que " help.html " está realmente en la carpeta de inicio de la aplicación, o el WebBrowser mostrará un " esta página no se puede mostrar ... " mensaje. Si está ejecutando su aplicación desde Visual Studio, Application.StartupPath estará en la carpeta de su proyecto, en " \ bin \ Debug \ " o el " \ bin \ Release \ " subcarpeta (dependiendo de si lo está ejecutando en modo de depuración o versión).
Otros consejos
Mirando la excepción, parece que está proporcionando un enlace a la ubicación local / de red, que no es una ruta válida.
EDITAR: Linklabel está destinado a actuar como un hipervínculo. No debe usarse para abrir un formulario dentro de la aplicación
EDIT2: ¿Cuál es el objetivo del enlace? Intente configurarlo en una URL apropiada & amp; mira qué pasa. Si se trata de una URL correcta, supongo que debería abrir el formulario junto con la URL.
EDIT3: Ponga esto dentro del método principal de una aplicación de consola & amp; mira lo que pasa.
try
{
Process.Start("c:\\calc.exe");
}
catch (Exception e)
{
Console.WriteLine("exception caught: " + e);
}
Creo que debe colocar la ruta correctamente para asegurarse de que no se produzca la excepción.
Como dije antes, ¿cuál es el objetivo del enlace?
EDIT4: Lamento la confusión. MusiGenesis tiene razón. Es un enlace simple, que no puede ejecutarse por sí solo. Busque dentro de su código para la llamada al método Process.Start
.
Sugeriré reconstruir el proyecto. ¿Tenía / tenía código antes de hacer una llamada a Process.Start
?
En una nota al margen, vea si tiene más de 1 controladores de eventos registrados para manejar el clic.