2014-11-06 73 views
0

我有两个选择。类别和子类别。更改选择是动态生成的

我试图改变他们是这样的:

var select_cat = webBrowser1.Document.GetElementsByTagName("select")["cat"]; 
select_cat.Focus(); 
select_cat.SetAttribute("value", "2"); 
select_cat.InvokeMember("onchange"); 
select_cat.RemoveFocus(); 

var select_subcat = webBrowser1.Document.GetElementsByTagName("select")["subcat"]; 
select_subcat.Focus(); 
select_subcat.SetAttribute("value", "102"); 
select_subcat.InvokeMember("onchange"); 
select_subcat.RemoveFocus(); 

的SUBCAT选择是动态生成的,基于什么是第一个(类)中选择。 如果我运行此代码,我得到异常:发生类型'System.NullReferenceException'的第一次机会异常 这是因为subcat选择不存在我猜webBrowser1元素。有没有办法一个接一个地选择它们?

+0

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2014-11-07 00:11:36

+0

抱歉,我的标题中包含标签。永远不会再做。 – user1410644 2014-11-07 00:15:47

回答

0

您的问题是select_cat.InvokeMember("onchange")正在浏览器中启动一个新的“线程”。因此,在由onchange事件填充subcat之前,您正在调用select_subcat。您将不得不直接在代码中调用由“onchange”调用的函数,或者实现某种类型的自旋锁以等待subcat填充。

+0

我在等待它的存在,但没有出现在我的脑海里。 – user1410644 2014-11-07 00:13:56

+0

你有权访问Javascript代码吗?你可以在onchange事件中为select_cat而不是在c#中设置属性。 – DWCP 2014-11-07 00:39:53

相关问题