【问题标题】:Panel Control doesn't update面板控制不更新
【发布时间】:2015-05-14 14:54:38
【问题描述】:

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

//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背景已经改变并且没有控制,但是它是一样的,所以我想知道什么问题?

【问题讨论】:

    标签: c# controls


    【解决方案1】:

    您所做的只是将 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);
    }
    

    【讨论】:

      【解决方案2】:

      您当前所做的是修改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
      

      【讨论】:

      • 谢谢!但是正如您在我的代码的第一行中看到的那样,我将 pnl_page_active 保存在某个静态类中,因为我想随时将它恢复到我的主窗体,并且属性不仅仅是大小、位置等,它还有一些以编程方式更改的事件,
      猜你喜欢
      • 2018-12-23
      • 2010-09-18
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      相关资源
      最近更新 更多