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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top