Необработанное исключение при нажатии Linklabel C # Winform - PullRequest
2 голосов
/ 12 сентября 2009

Я получаю странное необработанное исключение, когда нажимаю на ярлык ссылки, который должен открыть форму. Я попытался поместить код в обработчик событий linklabel_click в блок try-catch, но все равно получаю сообщение об ошибке ниже.

См. Конец этого сообщения для подробности о вызове вовремя (JIT) отладка вместо этого диалога коробка.
************** Текст исключения ************** System.ComponentModel.Win32Exception: Система не может найти файл указано в System.Diagnostics.Process.StartWithShellExecuteEx (ProcessStartInfo startInfo) в System.Diagnostics.Process.Start ()
в System.Diagnostics.Process.Start (ProcessStartInfo startInfo) в System.Diagnostics.Process.Start (String fileName) в InfoCapsule.FrmLink.llblHelp_LinkClicked (Объект отправитель, LinkLabelLinkClickedEventArgs есть System.Windows.Forms.LinkLabel.OnLinkClicked (LinkLabelLinkClickedEventArgs есть System.Windows.Forms.LinkLabel.OnMouseUp (MouseEventArgs есть System.Windows.Forms.Control.WmMouseUp (Message & m, кнопка MouseButtons, щелчки Int32) в System.Windows.Forms.Control.WndProc (Message & м) в System.Windows.Forms.Label.WndProc (Message & м) в System.Windows.Forms.LinkLabel.WndProc (Message & сообщение) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Message & м) в System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & м) в 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 ]

2 голосов
/ 12 сентября 2009

Я только что проверил это с помощью элемента управления WebBrowser, и вы можете перейти к локальному файлу, вообще не беспокоясь о классе Uri. Этот код должен работать для вас:

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

Иногда Uri странные, хотя я никогда раньше не видел, чтобы они генерировали неуловимое исключение (хотя это может быть веб-браузер, вызывающий исключение - я не знаю).

Убедитесь, что при запуске этого кода «help.html» фактически находится в папке запуска приложения, или веб-браузер отобразит сообщение «эта страница не может быть отображена ...». Если вы запускаете приложение из Visual Studio, Application.StartupPath будет находиться в папке вашего проекта, в подпапке «\ bin \ Debug \» или «\ bin \ Release \» (в зависимости от того, запустить его в режиме отладки или выпуска).

1 голос
/ 12 сентября 2009

Глядя на исключение, кажется, что вы предоставляете ссылку на локальное / сетевое местоположение, которое не является допустимым путем.

РЕДАКТИРОВАТЬ: Linklabel должен действовать как гиперссылка. Не следует использовать для открытия формы внутри приложения

РЕДАКТИРОВАТЬ 2: Какова цель для ссылки? Попробуйте установить для него соответствующий URL-адрес и посмотрите, что произойдет. Если это правильный URL, он должен открыть форму вместе с URL, я думаю.

EDIT3: поместите это в основной метод консольного приложения и посмотрите, что произойдет.

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

Я думаю, вы должны правильно указать путь, чтобы исключение не происходило.
Как я уже говорил, какова цель ссылки?

РЕДАКТИРОВАТЬ4: Я прошу прощения за путаницу. MusiGenesis это правильно. Это простая ссылка, которая не может быть выполнена сама по себе. Найдите внутри своего кода для вызова метода Process.Start.

Я предложу перестроить проект. Был ли у вас / был код до того, как вы позвонили Process.Start?

Обратите внимание: если у вас есть более 1 обработчика событий , зарегистрированных для обработки клика.

...