更改动态生成的选择

本文关键字:选择 动态 | 更新日期: 2023-09-27 18:29:33

我有两个选择。类别和子类别。

我试着这样改变它们:

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();

子集选择是根据第一个(类别)中选择的内容动态生成的。如果我运行此代码,我会得到异常:出现类型为"System.NullReferenceException"的首次机会异常这是因为我想webBrowser1元素的子集选择不存在。有没有办法一个接一个地选择它们?

更改动态生成的选择

您的问题是select_cat.InvokeMember("onchange")正在浏览器中启动一个新的"线程"。因此,在onchange事件填充subcat之前,您正在调用select_subcat。您必须在代码中直接调用"onchange"调用的函数,或者实现某种spinlock来等待subcat的填充。