面板控制不会更新

时间:2015-05-14 14:54:38

标签: c# controls

我的页面上有Panel对象,我想用另一个Panel替换它

//Info.panel[cb_page_number.SelectedIndex] = pnl_page_active;
Panel new_panel = new Panel();
new_panel.BackColor = Color.White;
//new_panel.Name ="page_"+ (cb_page_number.SelectedIndex+1).ToString();
//cb_page_number.Items.Add(new_panel.Name);
//cb_page_number.SelectedIndex = cb_page_number.Items.Count-1;
pnl_page_active = new_panel;
pnl_page_active.Refresh();
pnl_page_active.Update();
Application.DoEvents();

pnl_page_active具有象牙色背景颜色,并且有一些控件。当我执行上面的代码时,我会看到pnl_page_active背景已被更改,并且无法控制,但它是一样的,所以我想知道问题是什么?

2 个答案:

答案 0 :(得分:2)

您所做的就是将new_panel变量分配给pnl_page_active。它与Control层次结构无关。

您需要从其父级中删除旧面板并插入新面板:

Control parent = pnl_page_active.Parent;
if (parent != null) {
    parent.Controls.Remove(pnl_page_active);
    parent.Controls.Add(new_panel);
}

答案 1 :(得分:1)

您目前正在做的是修改pnl_page_active以引用new_panel所在的同一个面板......但new_panel从未添加到表单中,因此您看不到颜色变化。

删除您在上面发布的所有代码,然后直接更改BackColor

pnl_page_active.BackColor = Color.White;

如果您想用新的Panel替换现有的Panel(无论出于何种原因),除了要复制的任何属性之外,您还必须确保它具有相同的父级,大小,位置等。

Panel new_panel = new Panel();
new_panel.BackColor = Color.White;
new_panel.Size = pnl_page_active.Size;
new_panel.Location = pnl_page_active.Location;
new_panel.Parent = pnl_page_active.Parent;
new_panel.Show();

pnl_page_active.Hide();  // or Dispose if you don't want it anymore