2

フォームを開くリンクラベルをクリックすると、奇妙な未処理の例外が発生します。コードを linklabel_click イベント ハンドラーの try-catch ブロックに入れようとしましたが、それでも以下のエラーが発生します。

このダイアログ ボックスの代わりに Just-In-Time (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(オブジェクト送信者、LinkLabelLinkClickedEventArgs e) で System.Windows.Forms.LinkLabel.OnLinkClicked(LinkLabelLinkClickedEventArgs e) で) System.Windows.Forms.LinkLabel.OnMouseUp(MouseEventArgs e) で System.Windows.Forms.Control.WmMouseUp(Message& m、MouseButtons ボタン、Int32 クリック) で 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.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: 混乱させて申し訳ありません。MusiGenesisは正しいです。これは単純なリンクであり、単独では実行できません。Process.Startメソッド呼び出し のコード内を検索します。

プロジェクトを再構築することをお勧めします。に電話をかける前にコードを持っていましたProcess.Startか?

余談ですが、クリックを処理するために複数のイベントハンドラーが登録されているかどうかを確認してください。

于 2009-09-12T01:54:18.890 に答える