2012-08-25 35 views
1

首先,我一直在寻找我的问题,找不到\帮助。 所以我的问题是我有3个按钮和三个userControl,当我点击一个按钮时,它显示usercontrol 1,但在我点击按钮2.我不能回到usercontrol 1我卡在usercontrol2和按钮1没有做任何东西了。 这里是我的代码:如何打开用户控件的点击按钮C#

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(); 
    } 
} 

回答

2

看来,你应该有:

u1=new UserControl1(); 
u2=new UserControl2(); 
u3=new UserControl3(); 
在构造 public Form2()

而不是在事件处理程序中。这将允许您在您的button1_Click处理程序中添加

u2.Hide(); 
u3.Hide(); 

您应该还可以添加u3.Hide()button2_Click

+0

感谢您的回复克里斯 但它尚未解决,如果我添加u3.hide();在button2_click我得到NullRefrenceException未处理 ,这实际上是我的问题,如果我点击按钮2与出单击按钮1第一我不能我得到这个错误 等等它继续按钮3,如果我点击按钮3我也会得到相同的错误,我将不得不去按钮1,然后按钮2,然后按钮3,然后我不能得到任何用户控制了结束后按钮3显示usercontrol3 – Kraze

+0

错误图像下面 http://i.stack.imgur.com /3S62D.jpg – Kraze

+0

你没有看完他的全部答案。将实例移到构造函数中。 – BAF

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窗体用户控件。你只需要隐藏你的控件。

+0

感谢它varg,但我会去我的第一次,因为它对我来说很容易,但你也太酷了 – Kraze

+0

不要忘记标记为您的问题的答案张贴。 – varg