5

我有一个 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);
}

我添加了这个,但它不起作用

4

4 回答 4

13

添加一个容器控件(如果我没记错的话,工具箱中有一个容器部分?),就像一个面板。为您想要动态切换的内容创建用户控件。所以像一个'HomePage'用户控件和一个'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 上为 Panel 创建一个静态属性,以便您可以随时访问它来交换控件。

在此示例中,我还将为其添加一个静态方法

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);
  • 另一种方法是在主窗体上而不是在窗体内绑定按钮单击事件。

像这样:

HomePage ctlHomePage = new HomePage();
ctlHomePage.Click += MyClickEvent;
myPanel.Controls.Add(ctlHomePage)

...

private void MyClickEvent(object sender, RoutedEventArgs e)
{
  ..switch user control code here...
}
于 2013-03-04T16:05:28.917 回答
2

创建一个返回 UserControl 对象的方法。然后将条件放入该方法中,以确定您要在特定条件下加载哪个控件,然后放入主表单代码中。

UserControl control = GetControlFromMyMethod();
form1.Controls.Add(control);

其中 'control' 是您的方法返回的控件。

要删除现有的,您必须遍历 form1.Controls 并找出控件并调用“删除”。

更新:Mike C 有一个更好的想法,即添加一个面板并在面板上加载您想要的控件,因为这样很容易删除您的控件,然后您不必遍历表单控件来找到它然后将其删除。

于 2013-03-04T16:03:18.537 回答
2

试试这个:

this.Controls.Clear();
usercontrol load = new usercontrol ();
this.Controls.Add(load);
load.Show();
于 2016-02-11T09:42:48.460 回答
0

你可以试试这个 它肯定会帮助你,因为它确实帮助了我很多它简短而直接的希望这会有所帮助

于 2013-05-30T18:08:06.557 回答