我有一些标签打开,每个标签页都被监禁。 我想通过单击表单中的按钮从当前标签页打开另一个,当前标签的文本将更改。 我使用下面的代码,以便按下按钮时,当前标签页的名称会改变:
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;
}
}
如何在不删除防止闪烁的代码的情况下重新开始工作?
答案 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();
}