单击Linklabel时出现未处理的异常C#Winform

时间:2009-09-12 01:52:57

标签: c# exception linklabel

当我点击应该打开表单的linklabel时,我收到一个奇怪的未处理异常。我试图将代码放在trylab函数块中的linklabel_click事件处理程序中,但我仍然得到以下错误。

  

请参阅此消息的结尾   关于调用即时的详细信息   (JIT)调试而不是此对话框   框。
  **************异常文本************** System.ComponentModel.Win32Exception:   系统找不到该文件   指定于   System.Diagnostics.Process.StartWithShellExecuteEx(的ProcessStartInfo   startInfo)at   System.Diagnostics.Process.Start()
  在   System.Diagnostics.Process.Start(的ProcessStartInfo   startInfo)at   System.Diagnostics.Process.Start(字符串   fileName)at   InfoCapsule.FrmLink.llblHelp_LinkClicked(对象   发件人,LinkLabelLinkClickedEventArgs   吃   System.Windows.Forms.LinkLabel.OnLinkClicked(LinkLabelLinkClickedEventArgs   吃   System.Windows.Forms.LinkLabel.OnMouseUp(MouseEventArgs   吃   System.Windows.Forms.Control.WmMouseUp(消息&安培;   m,MouseButtons按钮,Int32点击)   在   System.Windows.Forms.Control.WndProc(消息&安培;   m)at   System.Windows.Forms.Label.WndProc(消息&安培;   m)at   System.Windows.Forms.LinkLabel.WndProc(消息&安培;   msg)at   System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息&安培;   m)at   System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息&安培;   m)at   System.Windows.Forms.NativeWindow.Callback(IntPtr的   hWnd,Int32 msg,IntPtr wparam,IntPtr   LPARAM)

linklabel_click的代码如下。

private void llblHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    try
    {
        refFrmHelp = new FrmHelp(this);
        refFrmHelp.Show();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

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;
            }

请帮我调试。

2 个答案:

答案 0 :(得分:2)

我刚用WebBrowser控件对此进行了测试,您可以导航到本地文件,而根本不需要使用Uri类。此代码应该适合您:

string sitePath = Application.StartupPath + @"\help.html";
wbHelp.Navigate(sitePath);

Uri有时候有点古怪,虽然我从未见过它们之前抛出一个无法捕获的异常(虽然它可能是WebBrowser抛出异常 - 我不知道)。

确保在运行此代码时“help.html”实际位于应用程序的启动文件夹中,或者WebBrowser将显示“此页面无法显示...”消息。如果从Visual Studio运行应用程序,Application.StartupPath将位于项目的文件夹中,位于“\ bin \ Debug \”或“\ bin \ Release \”子文件夹中(取决于您是否是在调试或发布模式下运行它。)

答案 1 :(得分:1)

查看异常,您似乎提供了指向本地/网络位置的链接 - 这不是有效路径。

编辑:Linklabel的作用就像一个超链接。它不应该用于在应用程序中打开表单

<击> EDIT2:链接的目标是什么?尝试将其设置为适当的URL&amp;走着瞧吧。如果它是一个正确的URL,我猜它应该打开表格和URL。

EDIT3:把它放在控制台应用程序的主要方法中。看看会发生什么。

    try
    {
        Process.Start("c:\\calc.exe");
    }
    catch (Exception e)
    {
        Console.WriteLine("exception caught: " + e);
    }

我认为,您应该正确放置路径以确保不会发生异常 正如我之前所说,链接的目标是什么?

EDIT4:我很抱歉这种混乱。 MusiGenesis是对的。它是一个简单的链接,不能自己执行。在Process.Start方法调用的代码中查找。

我建议重新构建项目。 在拨打Process.Start之前您是否拥有/拥有过代码?

在旁注中,查看您是否已注册处理点击的 多个事件处理程序