当我点击应该打开表单的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;
}
请帮我调试。
答案 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
之前您是否拥有/拥有过代码?
在旁注中,查看您是否已注册处理点击的 多个事件处理程序 。