我有一个窗口的形式,我不想做任何其他形式的窗口只有一个窗口的形式和不同的用户控件我如何能用户控件之间,例如改变一个隐藏程序和显示其他用户的控制?
private void Btt_info_Click(object sender, EventArgs e)
{
Frm_Main frm_main = new Frm_Main();
frm_main.Controls["panel1"].Controls.Clear();
UC_Info uc_info = new UC_Info();
frm_main.Controls["panel1"].Controls.Add(uc_info);
}
我补充这一点,但它不工作
添加一个容器控件(如果我没记错的话,有一个在工具箱中的容器部分?),喜欢的面板。 创建要动态切换围绕什么,用户控件。 所以要像“主页”用户控件和“LoginPage”用户控件。 动态添加要显示在容器上的用户控件。 当你想,从容器中取出,并添加不同的用户控件:
Panel myPanel = new Panel();
LoginPage ctlLoginPage = new LoginPage();
HomePage ctlHomePage = new HomePage();
//add the loginpage to the panel first
myPanel.Controls.Add(ctlLoginPage);
...do stuff...
//remove whatever control is currently in the Panel
myPanel.Controls.Clear();
//add the other control, the HomePage control instead now
myPanel.Controls.Add(ctlHomePage);
..do other stuff...
我通常做这种方式,所以你离开你的窗体本身开放加入通用控件以及可能您不同的“页”之间共享的东西。
编辑:请注意,我通常会添加面板设计,而不是在代码中动态创建。 这只是一个例子。
编辑:你的MainForm和用户控件之间的相互作用可以通过几种不同的方式来处理,我不是说所有的这些是正确的方法。
- 您为您的MainForm的面板的静态属性,让你可以随时访问它周围交换你的控制。
在这个例子中,我还将添加一个静态方法吧
enum PanelControlsEnum {HomePage, LoginPage};
public static Panel MyContainerPanel {get;set;}
public static void SwitchPanelControls(PanelControlsEnum selControl){
..put your switch panels code here..
}
然后你的用户控件中调用一个预定义的方法,是这样的:
MainForm.SwitchPanelControls(PanelControlsEnum.HomePage);
- 另一种方法是单击按钮事件绑定在你的MainForm而不是表单中。
像这样:
HomePage ctlHomePage = new HomePage();
ctlHomePage.Click += MyClickEvent;
myPanel.Controls.Add(ctlHomePage)
...
private void MyClickEvent(object sender, RoutedEventArgs e)
{
..switch user control code here...
}
创建一个返回用户控件对象的方法。 然后把条件在该方法中哪个管你想在特定的条件下加载,然后在主窗体的代码。
UserControl control = GetControlFromMyMethod();
form1.Controls.Add(control);
其中,“控制”是从你的方法返回的控制。
要删除现有的一个,你必须遍历form1.Controls,找出控制和呼叫“删除”。
更新:迈克C有增加面板和加载面板上您想要的控制,那么一个更好的想法很容易删除你的控制,你那么不通过形式有循环控制找到它,然后将其删除。
试试这个:
this.Controls.Clear();
usercontrol load = new usercontrol ();
this.Controls.Add(load);
load.Show();
你可以试试这个它一定会帮助你,因为它也帮助了我很多,简短开门见山,希望这将有助于