我的目标
我正在使用Visual Studio 2013在C#中开发一个项目。该项目是我打算包含很多页面的项目。这些页面都使用按钮链接在一起。我的问题是我无法为此提出有效而优雅的解决方案。
我的尝试
到目前为止,我已经为我的问题想出了两个可能的解决方案。首先我添加了额外的表格然后按下按钮我隐藏了当前表格并显示了新表格,如下所示:
Form2 frm = new Form2();
frm.Show();`
Form1.Hide();
虽然这确实有效,但我有两个问题。
我尝试的第二个可能的解决方案包括使用Panels。所以我基本上在不同的Panel上创建了每个页面。然后按下按钮显示适当的面板,其余部分被隐藏。像这样:
private void button1_Click(object sender, EventArgs e)
{
mainMenuPanel.Hide();
submenuPanel1.Show();
submenuPanel2.Hide();
submenuPanel3.Hide();
submenuPanel4.Hide();
}
这正是我所寻找的,但我的问题是管理大量的面板很快成为一场噩梦。编辑隐藏在9个其他Panel后面的Panel上的控件以及我项目中的面板数量只会增长 - 这似乎不是当前形式的理想解决方案。
在我的脑海中,我认为Visual Studio 2013中可能有一个选项允许我“隐藏”我未在表单上使用的面板,或者暂时将它们从表单中拖出。这是Visual Studio中的一个选项。
如果没有,你们中的任何人都知道一种更有效,更易于管理的方法吗?
提前致谢。
答案 0 :(得分:3)
如果您使用WinForms,最好的选择可能是使用UserControls。你实际上可以将UserControl类扩展为"页面"即:UserControlPage。这使得表单在功能上变得更加简单,但是如果控件需要相互通信,则需要处理事件/传递数据。
如果你没有使用Winforms,WPF本身支持所有这些,并且有很好的工具来构建你需要的所有页面,存储/填充你的数据,以及传播事件。
答案 1 :(得分:1)
如果您希望单个表单包含不断变化的内容,并且您不想在一个表单中弄乱面板,那么解决方案就是user controls。您将能够动态创建它们并添加到表单控件。此外没有任何问题,因为您的表单将非常简单 - 您可以拥有单个“占位符”'控件将用于停靠当前显示的用户控件(例如面板控件):
private void ShowContent(Control content)
{
placeHolderPanel.Controls.Clear(); // clear current content
placeHolderPanel.Controls.Add(content); // add new
content.Dock = DockStyle.Fill; // fill placeholder area
}
用法:
private void button1_Click(object sender, EventArgs e)
{
ShowContent(new FooUserControl());
}
答案 2 :(得分:0)
您可以继承Panel类并根据需要创建尽可能多的自定义面板,然后将它们插入到主窗体上,并按照您的描述进行管理。
优点是您可以将它们单独编辑为单独的用户控件。
缺点是您从主窗体中丢失了对这些面板上的控件的直接事件处理。您仍然可以在这些面板上定义自己的事件并委派各个控件事件。
总会在某处进行权衡。
干杯