2009-09-12 2 views
2

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

Смотрите в конце этого сообщения Подробную информацию о вызове точно в срок (JIT) отладки вместо данного диалогового окна.
************** Исключительный текст ************** System.ComponentModel.Win32Exception: Не удается найти файл , указанный в Система .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 e) на Syste m.Windows.Forms.LinkLabel.OnLinkClicked (LinkLabelLinkClickedEventArgs е) в System.Windows.Forms.LinkLabel.OnMouseUp (MouseEventArgs е) в System.Windows.Forms.Control.WmMouseUp (Сообщение & м, кнопка MouseButtons, Int32 щелчки) в System.Windows.Forms.Control.WndProc (Сообщение & м) на System.Windows.Forms.Label.WndProc (Сообщение & м) на System.Windows.Forms.LinkLabel.WndProc (Сообщение & ) по адресу 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; 
      } 

Можете ли вы мне помочь в отладке.

+0

Следует упомянуть, что у вас есть как передняя, ​​так и обратная косые черты в вашем пути к файлу. – rossisdead

ответ

2

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

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

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

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

+0

Спасибо. Но я не понимаю, почему это необработанное исключение. Если в FrmHelp есть исключение, он должен быть пойман в блоке try-catch вызывающего метода. С уважением – kobra

+0

См. Мое обновление. – MusiGenesis

+0

Изучив методы Uri, я не думаю, что мой код выше будет работать. Какой тип объекта «wbHelp»? – MusiGenesis

1

Если вы ищете исключение, похоже, вы предоставляете ссылку на локальное/сетевое местоположение - это не допустимый путь.

EDIT: 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?

На стороне записки, если у вас есть более 1 обработчиков событий прописал обрабатывать щелчок.

+0

LinkLabel в WinForms - это еще один элемент управления. Это похоже на гиперссылку, но она делает все, что хочет программист. – MusiGenesis

+0

Спасибо за ваш ответ. Я получаю вашу точку зрения, но это не должно приводить к необработанному исключению. Я добавил свой код к вопросу. – kobra

+0

Что такое код внутри формы? Вы звоните в Process.Start? – shahkalpesh

Смежные вопросы