【问题标题】:ListView problems, Cross class operationListView问题,跨类操作
【发布时间】:2014-03-24 15:45:50
【问题描述】:

我正在尝试从另一个类 (Comm) 将 ListViewItem 添加到主窗体 (Form1) 上的 listView。

表格1:

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

通讯:

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

这段代码抛出了下一个异常:

“在创建窗口句柄之前,不能对控件调用 Invoke 或 BeginInvoke。”

有什么想法吗?

【问题讨论】:

    标签: c# class listview listviewitem


    【解决方案1】:

    您可以在致电BeginInvoke() 之前查看InvokeRequired。也许这对你有用:

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

    虽然我会拆分 add_to_reg_event() 并使用 lambda 来避免该临时变量:

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

    【讨论】:

    • 非常感谢。完美运行。现在我有另一个问题,通过 count 属性添加了项目,它们就在那里。但是我一个都看不到。
    • @VictorLev ListViewItems 添加时是否有正确的数据?能不能加个Debug.WriteLine()在调试器下运行?
    • >System.Windows.Forms.ListView,Items.Count:1,Items[0]:ListViewItem:{00-15-8D-00-00-22-02-2B}。这是输出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多