Windows窗体c#通过代码改变用户控制
本文关键字:改变 用户 控制 代码 窗体 Windows | 更新日期: 2023-09-27 18:02:02
我有一个windows窗体,我不想让任何其他的windows窗体只是一个windows窗体和不同的用户控件我怎么能改变用户控件之间,例如隐藏一个和显示其他用户控件编程?
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用户控制。动态地将要显示的用户控件添加到容器中。当你需要的时候,把它从容器中移除,并添加一个不同的usercontrol:
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和usercontrols之间的交互可以用几种不同的方式来处理,我并不是说其中任何一种方法都是正确的。- 在主窗体上为面板创建一个静态属性,这样你可以随时访问它来交换你的控制。
在这个例子中,我还将为它添加一个静态方法
enum PanelControlsEnum {HomePage, LoginPage};
public static Panel MyContainerPanel {get;set;}
public static void SwitchPanelControls(PanelControlsEnum selControl){
..put your switch panels code here..
}
然后在你的usercontrol中调用一个预定义的方法,比如:
MainForm.SwitchPanelControls(PanelControlsEnum.HomePage);
- 另一种方法是绑定主窗体上的按钮单击事件
:
HomePage ctlHomePage = new HomePage();
ctlHomePage.Click += MyClickEvent;
myPanel.Controls.Add(ctlHomePage)
…
private void MyClickEvent(object sender, RoutedEventArgs e)
{
..switch user control code here...
}
创建一个返回UserControl对象的方法。然后在该方法中添加条件,以确定要在特定条件下加载哪个控件,然后在主表单代码中添加条件。
UserControl control = GetControlFromMyMethod();
form1.Controls.Add(control);
其中'control'是从你的方法返回的控件。
要删除现有的表单,必须遍历form1。控件,找出控件并调用'Remove'。
更新:Mike C有一个更好的主意,添加一个面板,然后在面板上加载你想要的控件,这样很容易删除你的控件,然后你不必遍历表单控件来找到它,然后删除它。
试试这个:
this.Controls.Clear();
usercontrol load = new usercontrol ();
this.Controls.Add(load);
load.Show();
你可以试试这个,它肯定会对你有帮助,就像它对我有很多帮助一样,它简短而直接,希望对你有帮助