首先,我一直在搜索我的问题而无法找到\ help。
所以我的问题是我有3个按钮和3个userControl
当我点击一个按钮它显示usercontrol 1但是在我点击按钮2之后我无法回到usercontrol 1我被卡在usercontrol2和按钮1不再做任何事了。
这是我的代码:
public partial class Form2 : Form
{
UserControl1 u1;
UserControl2 u2;
UserControl3 u3;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
u1 = new UserControl1();
u1.Dock = DockStyle.Fill;
this.Controls.Add(u1);
}
private void button2_Click(object sender, EventArgs e)
{
u1.Hide();
u2 = new UserControl2();
u2.Dock = DockStyle.Fill;
this.Controls.Add(u2);
}
private void button3_Click(object sender, EventArgs e)
{
u1.Hide();
u2.Hide();
u3 = new UserControl3();
u3.Dock = DockStyle.Fill;
this.Controls.Add(u3);
}
private void button4_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
为其他需要的人提供已解决的代码:) --->
enter code here
public partial class Form2 : Form
{
UserControl1 u1;
UserControl2 u2;
UserControl3 u3;
public Form2()
{
u1 = new UserControl1();
u2 = new UserControl2();
u3 = new UserControl3();
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
u2.Hide();
u3.Hide();
u1.Show();
u1.Dock = DockStyle.Fill;
this.Controls.Add(u1);
}
private void button2_Click(object sender, EventArgs e)
{
u1.Hide();
u3.Hide();
u2.Show();
u2.Dock = DockStyle.Fill;
this.Controls.Add(u2);
}
private void button3_Click(object sender, EventArgs e)
{
u1.Hide();
u2.Hide();
u3.Show();
u3.Dock = DockStyle.Fill;
this.Controls.Add(u3);
}
private void button4_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
答案 0 :(得分:2)
看来你应该:
u1=new UserControl1();
u2=new UserControl2();
u3=new UserControl3();
在构造函数public Form2()
中而不是在事件处理程序中。这将允许您添加
u2.Hide();
u3.Hide();
在button1_Click
处理程序中。
您可能还应将u3.Hide()
添加到button2_Click
。
答案 1 :(得分:1)
看看这个。我认为这是绝对清楚的,不需要任何进一步的解释。
public partial class Form1 : Form
{
private UserControl1 uc1 = new UserControl1();
private UserControl2 uc2 = new UserControl2();
private UserControl3 uc3 = new UserControl3();
public Form1()
{
InitializeComponent();
AssignedButtonClickEvents();
}
private void Form1_Load(object sender, EventArgs e)
{
}
protected void ButtonClicked(object sender, EventArgs e)
{
Button button = sender as Button;
panel1.Controls.Clear();
if (button != null)
{
switch (button.Name)
{
case "button1":
uc1.Dock = DockStyle.Fill;
panel1.Controls.Add(uc1);
break;
case "button2":
uc2.Dock = DockStyle.Fill;
panel1.Controls.Add(uc2);
break;
case "button3":
uc3.Dock = DockStyle.Fill;
panel1.Controls.Add(uc3);
break;
default:
panel1.Controls.Clear();
break;
}
}
}
public void AssignedButtonClickEvents()
{
foreach (Control ctl in this.Controls)
{
if (ctl is Button)
{
Button button = (Button)ctl;
button.Click += new EventHandler(ButtonClicked);
}
}
}
修改强>
请注意,我创建了一个面板来存储用户控件,但我认为如果直接在Windows窗体上显示用户控件,它就是一样的。你只需要隐藏你的控件。
答案 2 :(得分:0)
如果在单击按钮时使用BringToFront()属性,则会发生该功能。此方法对除Hide()属性以外的响应按钮单击有效。
private void buttonProdutsList_Click(object sender, EventArgs e)
{
productsListView.BringToFront();
}