动态更改文档大纲

时间:2010-04-22 09:37:43

标签: c# winforms

我有一个代码

    void SomeButton_Click(object sender, EventArgs e)
    {
            if (this.Controls.Contains(Panel2))
            {
                this.Controls.Remove(Panel2);
            }
            else
            {
                this.Controls.Add(Panel2);
            }
    }

我的问题是:代码更改了表单上控件的文档大纲顺序。如何恢复以前的文档大纲?我应该使用哪些属性,方法?或者这是不可能的?

2 个答案:

答案 0 :(得分:0)

在删除之前找到索引并添加它,使用Insert与该索引。您需要通过explicit IList interface implementation

访问它
private int panelIndex = 0;

void SomeButton_Click(object sender, EventArgs e)
{
   if (this.Controls.Contains(Panel2))
   {
      panelIndex = this.Controls.IndexOf(Panel2);
      this.Controls.Remove(Panel2);
   }
   else
   {
      IList ctrlsAsList = (IList)this.Controls;
      ctrlsAsList.Insert(panelIndex, Panel2);
   }
}

答案 1 :(得分:0)

在添加控件后将Controls.SetChildIndex(Control child,int newIndex)用于将其放置在您希望它所在的位置。这仅在您知道控件所在的列表中的确切位置时才有效

作为替代方案,您是否考虑过添加所有面板然后设置Visible = false,直到您需要显示它们为止。这当然只有在面板都是预定义的情况下才有效。如果您是动态创建它们,那么这将不起作用。