c# - ListView problems, Cross class operation -
i'm trying add listviewitem listview on main form (form1), class(comm).
form1:
public listviewitem lvi_tmp; private void form1_load(object sender, eventargs e) { comm = new comm(this); } public void add_to_reg(listviewitem tmp) { lvi_tmp = tmp; this.invoke(new eventhandler(add_to_reg_event)); } public void add_to_reg_event(object sender, eventargs e) { lst_reg.items.add(lvi_tmp); lst_reg.refresh(); this.refresh(); }
comm:
public form1 mainfrm { get; set; } public comm (form1 _form1) { mainfrm = _form1; } private void add_item() { lvi = new listviewitem("itemtest"); lvi.subitems.add("subitemtest"); lvi.tag = 1; mainfrm.add_to_reg(lvi); }
this code throwing next exception:
"invoke or begininvoke cannot called on control until window handle has been created."
any ideas?
you can check invokerequired
before callling begininvoke()
. perhaps work you:
public void add_to_reg(listviewitem tmp) { lvi_tmp = tmp; if (this.invokerequired)) this.invoke(new eventhandler(add_to_reg_event)); else add_to_reg_event(null, null); }
although i'd split add_to_reg_event() , use lambda avoid temporary variable:
public void add_to_reg(listviewitem tmp) { if (this.invokerequired)) this.invoke(new action(() => add_to_reg_impl(tmp))); else add_to_reg_impl(tmp); } private void add_to_reg_impl(listviewitem item) { lst_reg.items.add(item); lst_reg.refresh(); this.refresh(); }
Comments
Post a Comment