这是显示/隐藏用户控件的正确方法吗?

时间:2015-11-11 13:50:16

标签: c# winforms

我只想问一下这是否是在主窗体上显示/隐藏用户控件的好方法。

我有一个带有3个按钮的form1(button1,button2,button3),我有用户控件(用户控件1,用户控件2,用户控件3,它们什么都没有)。

现在单击button1并显示用户control1,然后单击button2并显示用户control2并且用户control1隐藏....等等(所以有时候单击一个按钮,用户控件会显示并隐藏其余部分。< / p>

我使用了以下代码,它完全符合我的要求,但我的问题是: UserControl.BringToFront()函数将用户控件带到前面,每次单击按钮时它都会将用户控件带到前面,那么其他用户控件会发生什么?我的意思是每个用户控制在另一个上面的BringToFront()种地方,并且不会删除任何以前的用户控件。我觉得缺少一些东西,比如&#34;删除&#34;用于删除以前的UserControl的函数。如果我这样离开我的代码会发生什么(没有&#34;删除&#34;功能?请帮助。谢谢。

以下是代码,效果非常好:

  • 用户控件1名称为UC1
  • 用户控件2名称为UC2
  • 用户控件2名称为UC3

    public partial class Form1 : Form
    {
    
        public Form1()
        {
            InitializeComponent();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
    
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            UC1 uc1 = new UC1();
            Controls.Add(uc1);
            uc1.BringToFront();
    
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
    
            UC2 uc2 = new UC2();
            Controls.Add(uc2);
            uc2.BringToFront();
    
        }
    
        private void button3_Click(object sender, EventArgs e)
        {
            UC3 uc3 = new UC3();
            Controls.Add(uc3);
            uc3.BringToFront();
        }
    }
    

2 个答案:

答案 0 :(得分:1)

每次按下按钮时,重新创建控件,只需显示/隐藏控件:

private UC1 uc1 = new UC1() {
  Visible = false
};

private UC2 uc2 = new UC2() {
  Visible = false
};

private UC3 uc3 = new UC3() {
  Visible = false
};

private void VisualizeUC(Control value) {
  uc1.Visible = false;
  uc2.Visible = false;
  uc3.Visible = false;

  value.Visible = true; 
} 

private void Form1_Load(object sender, EventArgs e) {
  Controls.Add(uc1);
  Controls.Add(uc2); 
  Controls.Add(uc3);
}

private void button1_Click(object sender, EventArgs e) {
  VisualizeUC(uc1);
}

private void button2_Click(object sender, EventArgs e) {
  VisualizeUC(uc2);
}

private void button3_Click(object sender, EventArgs e) {
  VisualizeUC(uc3);
}

答案 1 :(得分:0)

每次按下按钮时,您之前都在创建每个控件的新实例,这很快就会增加许多不必要的控件。

而是创建并添加每个控件的一个实例,然后根据需要隐藏/显示:

// Put your controls here so they're accessible
UC1 uc1;
UC2 uc2;
UC3 uc3;

private void Form1_Load(object sender, EventArgs e)
{
    // Do this on form load so it only happens once

    // Instantiate your controls
    uc1 = new UC1();
    uc2 = new UC2();
    uc3 = new UC3();

    // Make them invisible
    uc1.Visible = false;
    uc2.Visible = false;
    uc3.Visible = false;

    // Add your controls
    Controls.Add(uc1);
    Controls.Add(uc2);
    Controls.Add(uc3);
}

private void button1_Click(object sender, EventArgs e)
{
    // You can keep using bring to front
    uc1.BringToFront();

    // OR

    // Use show/hide
    uc1.Show();
    uc2.Hide();
    uc3.Hide();
}

private void button2_Click(object sender, EventArgs e)
{
    uc2.BringToFront();

    // OR show hide...
}

private void button3_Click(object sender, EventArgs e)
{
    uc3.BringToFront();
}