在一个线程上创建的控件不能作为其他线程上的控件的父级-将DataGridView添加到TabPage添加到TabCont

本文关键字:控件 添加 线程 TabCont TabPage 其他 DataGridView 不能 一个 创建 | 更新日期: 2023-09-27 18:26:11

我正在使用DataGridView务实地创建TabPage。TabPage的显示正确,但缺少DataGridView。有人能认出为什么他们的DGV没有出现在标签上吗?LoadDataGridToTab的形式正确。不过它是从另一个窗体调用的。应该

    public void LoadDataGridToTab(Main main, string category)
    {
        try
        {
            //Set Cell Style
            var dataGridViewCellStyle = new DataGridViewCellStyle
            {
                Alignment = DataGridViewContentAlignment.MiddleLeft,
                BackColor = SystemColors.Control,
                Font = new Font("Microsoft Sans Serif", 8.25F,
                    FontStyle.Regular, GraphicsUnit.Point, 0),
                ForeColor = SystemColors.WindowText,
                SelectionBackColor = SystemColors.Highlight,
                SelectionForeColor = SystemColors.HighlightText,
                WrapMode = DataGridViewTriState.True
            };
            //Make the Grid
            var grid = new DataGridView
            {
                Name = "dgv_" + category,
                Text = category,
                Visible = true,
                Dock = DockStyle.Fill,
                AllowUserToAddRows = false,
                AllowUserToDeleteRows = false,
                AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
                ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize,
                ColumnHeadersDefaultCellStyle = dataGridViewCellStyle,
                DataSource = Auction.CacheAuctionsDataSet.Tables[category]
            };
            //Binding
            //var source = new BindingSource();
            //source.DataSource = CacheAuctionsDataSet.Tables[category];
            //Made the Tab
            var tmpTabPage = new TabPage(category)
            {
                Name = "tabctrl_" + category,
                Text = category,
                Visible = true
            };
            //Add the Grid to the Tab
            tmpTabPage.Controls.Add(grid);
            tmpTabPage.Refresh();
            //Add the Tab to the Control
            tabctrl_Auctions.Controls.Add(tmpTabPage);
            tabctrl_Auctions.Refresh();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }

在一个线程上创建的控件不能作为其他线程上的控件的父级-将DataGridView添加到TabPage添加到TabCont

您需要使用Invoke方法。

这里有一个例子https://stackoverflow.com/a/253150/2633161