C#tabcontrol的tabpage中的文本没有变化

时间:2014-02-19 10:18:35

标签: c# tabs tabcontrol flicker

我有一些标签打开,每个标签页都被监禁。 我想通过单击表单中的按钮从当前标签页打开另一个,当前标签的文本将更改。 我使用下面的代码,以便按下按钮时,当前标签页的名称会改变:

private void buttonNewForm_Click(object sender, EventArgs e)
        {
            newForm childForm = new newForm(tbc1);
            //TopLevel for form is set to false
            childForm.TopLevel = false;
            //select current TabPage
            int curr = tbc1.SelectedIndex;
            TabPage tbp = tbc1.TabPages[curr];
            tbc1.TabPages[curr].Text = "name of new form";
            tbp.Controls.Add(childForm);
            //Added form to tabpage
            childForm.WindowState = FormWindowState.Maximized;
            childForm.Show();
            Refresh();

        }

一直运行良好,直到我把代码放在主窗体中,这会阻止我忽略标签的闪烁:

protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
                return cp;
            }
        } 

如何在不删除防止闪烁的代码的情况下重新开始工作?

2 个答案:

答案 0 :(得分:0)

为了防止闪烁,试试这个

SuspendLayout();
// Add control and make size changes
childForm.Show();
Refresh();
ResumeLayout();

您应该考虑使用UserControl而不是表单嵌入标签页。

答案 1 :(得分:0)

最后我解决了这个问题。 相反,刷新()我必须使用 tbc1.refresh()

tbc1是我使用的tabcontrol的名称。

我没有,在我替换所有表单以使用除主表单之外的控件之后,我需要对上面的代码进行一些更改:

private void buttonNewForm_Click(object sender, EventArgs e)
        {
            newForm childForm = new newForm(tbc1);
            //select current TabPage
            int curr = tbc1.SelectedIndex;
            TabPage tbp = tbc1.TabPages[curr];
            tbc1.TabPages[curr].Text = "name of new form";
            tbp.Focus();
            tbp.Controls.Clear();
            tbp.Controls.Add(childForm);
            tbc1.Refresh();

        }