2013-04-03 91 views
0
private: System::Void link1_Click(System::Object^ sender, System::EventArgs^ e) 
    { 
     navigate(url1); 
    } 


private: System::Void navigate(System::String^ url) 
    { 
      for each (System::Windows::Forms::HtmlElement^ webpageelement in webBrowser->Document->All) 
      { 
       if (webpageelement->GetAttribute("u")) 
        this->webBrowser->Document->GetElementById("u")->SetAttribute("value", url); 
      } 

      for each (System::Windows::Forms::HtmlElement^ webpageelement in webBrowser->Document->All) 
      { 
       if (webpageelement->GetAttribute("value") == "Go") 
        webpageelement->InvokeMember("click"); 
      } 
    } 

我有很多其他按钮,调用函数的导航(),但我只会发布一个coz他们都是相同的,除了url的值。我的问题是我如何使我的应用程序停止退出/有错误,如果我点击按钮即使网页元素(“你”)不存在的形式。因为如果我点击它即使表单还没有完全加载我得到messagebox说未处理的异常错误,我想改变它到别的东西或只是忽略它,让我的应用程序再试一次。 THXC++ winform错误处理

+0

你将不得不修复你的代码,它不能通过设计工作。将代码移至DocumentCompleted事件的事件处理程序。 –

回答

0

使用trycatch可以给你一些基本的方法...例如

for each (System::Windows::Forms::HtmlElement^ webpageelement in webBrowser->Document->All) 
{ 
    try 
    { 
     if (webpageelement->GetAttribute("u")) 
     this->webBrowser->Document->GetElementById("u")->SetAttribute("value", url); 
    } 
    catch (Exception^ ex) 
    { 
     // Do something here, can be blank... 
     // This will try the above code, if it doesn't work it will continue without any error popup 
    } 
} 
+0

喜有错误THX的答案,但即时通讯,当我试试这个: “无法抛出或通过值或引用抓管理对象”和 “不能被捕获的析构函数和/或拷贝构造函数是不可访问“ –

+1

您需要在catch子句中放置一个'^':'catch(Exception^ex)'。请参阅编辑。 –

1

使用异常对于这样简单的检查处理是一个矫枉过正。只需做到以下几点:

HtmlElement ele = this->webBrowser->Document->GetElementById("u"); 
if (ele != null) 
    ele->SetAttribute("value", url);