我只想问一下这是否是在主窗体上显示/隐藏用户控件的好方法。
我有一个带有3个按钮的form1(button1,button2,button3),我有用户控件(用户控件1,用户控件2,用户控件3,它们什么都没有)。
现在单击button1并显示用户control1,然后单击button2并显示用户control2并且用户control1隐藏....等等(所以有时候单击一个按钮,用户控件会显示并隐藏其余部分。< / p>
我使用了以下代码,它完全符合我的要求,但我的问题是:
UserControl.BringToFront()
函数将用户控件带到前面,每次单击按钮时它都会将用户控件带到前面,那么其他用户控件会发生什么?我的意思是每个用户控制在另一个上面的BringToFront()
种地方,并且不会删除任何以前的用户控件。我觉得缺少一些东西,比如&#34;删除&#34;用于删除以前的UserControl的函数。如果我这样离开我的代码会发生什么(没有&#34;删除&#34;功能?请帮助。谢谢。
以下是代码,效果非常好:
用户控件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();
}
}
答案 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();
}