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

我添加了这个,但是它不工作

Windows窗体c#通过代码改变用户控制

添加一个容器控件(如果我没记错的话,工具箱中有一个容器部分?),就像一个面板。为您想要动态切换的内容创建用户控件。创建一个主页用户控制和一个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();

你可以试试这个,它肯定会对你有帮助,就像它对我有很多帮助一样,它简短而直接,希望对你有帮助