2

当我单击应该打开表单的链接标签时,我遇到了一个奇怪的未处理异常。我试图将代码放在 try-catch 块中的 linklabel_click 事件处理程序中,但我仍然收到以下错误。

有关调用即时 (JIT) 调试而不是此对话框的详细信息,请参阅此消息的末尾。
************** 异常文本 ************** System.ComponentModel.Win32Exception:系统找不到在 System.Diagnostics.Process 中指定的文件。 System.Diagnostics.Process.Start() 处的 StartWithShellExecuteEx(ProcessStartInfo startInfo)
在 System.Diagnostics.Process.Start(ProcessStartInfo startInfo) 在 System.Diagnostics.Process.Start(String fileName) 在 InfoCapsule.FrmLink.llblHelp_LinkClicked(Object sender, LinkLabelLinkClickedEventArgs e) 在 System.Windows.Forms.LinkLabel.OnLinkClicked(LinkLabelLinkClickedEventArgs e) ) 在 System.Windows.Forms.LinkLabel.OnMouseUp(MouseEventArgs e) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在System.Windows.Forms.Label.WndProc(Message& m) 在 System.Windows.Forms.LinkLabel.WndProc(Message& msg) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms。 Control.ControlNativeWindow.WndProc(消息&m) 在 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;
            }

你能帮我调试一下吗?

4

2 回答 2

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\”子文件夹中(取决于您是在调试或发布模式下运行它)。

于 2009-09-12T02:03:00.150 回答
1

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

编辑: Linklabel 旨在充当超链接。它不应该用于在应用程序内打开表单

EDIT2:链接的目标是什么?尝试将其设置为适当的 URL 并查看会发生什么。如果它是一个正确的 URL,我猜它应该与 URL 一起打开表单。

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

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

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

EDIT4:我很抱歉造成混乱。音乐创世纪是对的。它是一个普通链接,不能单独执行。在您的代码中查找Process.Start方法调用。

我会建议重建项目。在调用之前你有/有过代码Process.Start吗?

附带说明一下,看看您是否注册了超过 1 个事件处理程序来处理点击。

于 2009-09-12T01:54:18.890 回答