2015-05-14 160 views
0

我有面板对象我的网页上,我想与另一个小组面板控制不更新

//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有象牙的背景颜色来代替它,并且对一些控制。当我执行上面的代码,我expext看到pnl_page_active背景已经改变,并没有控制,但它是一样的,所以我想知道有什么问题?

回答

2

您所做的只是将new_panel变量分配给pnl_page_active。它与控制层次无关。

您需要删除旧的面板从它的父和插入新:

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

MerC! Mehrzad! – Vahid2017

1

你当前做的是修改pnl_page_active引用同一个小组,new_panel是...但new_panel被从未添加到窗体中,所以你看不到颜色的变化。

删除所有你上面贴的代码,而只是改变BackColor直接:

pnl_page_active.BackColor = Color.White; 

如果要更换新的一个(无论何种原因)现有的面板中,你将不得不作出除了你正在复制的任何属性之外,确保它具有相同的父级,大小,位置等。

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 
+1

谢谢!但正如你在代码的第一行所看到的,我将pnl_page_active保存在一些静态类中,因为我希望将它返回到主表单,并且属性不仅仅是大小,位置等等,它还有一些以编程方式更改的事件, – Vahid2017

+1

任何方式一起投赞成:) – Vahid2017

+0

谢谢。 :)很高兴Mehrzad修复它给你。 –