我有一个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);
}
我添加了这个,但它不起作用
答案 0 :(得分:13)
添加容器控件(如果我没记错的话,工具箱中有容器部分?),就像面板一样。为您想要动态切换的内容创建用户控件。所以,做一个' HomePage' usercontrol和' 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和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...
}
答案 1 :(得分:2)
创建一个返回UserControl对象的方法。然后在该方法中添加条件,以确定要在特定条件下加载哪个控件,然后在主表单代码中。
UserControl control = GetControlFromMyMethod();
form1.Controls.Add(control);
其中'control'是您方法返回的控件。
要删除现有的一个,你必须遍历form1.Controls并找出控件并调用'Remove'。
更新: Mike C有更好的想法添加一个面板并在面板上加载你想要的控件,因为它很容易删除你的控件,然后你不必遍历窗体控件找到它然后删除它。
答案 2 :(得分:2)
试试这个:
this.Controls.Clear();
usercontrol load = new usercontrol ();
this.Controls.Add(load);
load.Show();
答案 3 :(得分:0)
你可以尝试this它肯定会对你有所帮助,因为它确实帮助了我很多它简短而直接到希望会有所帮助