我已经有一段时间没有这样做了,所以不太确定如何做我需要的,但我相信这很简单。
基本上,我有一个带有导航 Pane 的表单。我想做到这一点,当用户单击该 Pane 上的按钮时,说“主页”,它会更改表单上的内容,但实际上不会切换到另一个表单,如果你明白我的话?
例如,我希望导航 Pane 始终保持原样,我只希望表单的内容发生变化。它几乎就像 Visual Studio 的“工具箱”中的“TabControl”工具,尽管我希望它们不是直接位于内容上方的选项卡,而是显示在侧 Pane 中的按钮。请参阅下图以获得更好的理解。谢谢!
(无论按下什么按钮,侧 Pane 和标题都保持不变,但内容会发生变化。)
最佳答案
我会使用 UserControl
来实现它。单击按钮时显示一个 UserControl
。我将创建一个接口(interface)(例如 IView
),该接口(interface)将由每个声明通用功能的 UserControl
实现,例如检查您是否可以从一个接口(interface)切换的方法像这样另一个(如表单的 OnClosing 事件):
public interface IView
{
bool CanClose();
}
public UserControl View1: IView
{
public bool CanClose()
{
...
}
}
public UserControl View2: IView
{
public bool CanClose()
{
...
}
}
然后,切换 View 就很容易了:
private bool CanCurrentViewClose()
{
if (groupBox1.Controls.Count == 0)
return true;
IView v = groupBox1.Controls[0] as IView;
return v.CanClose();
}
private void SwitchView(IView newView)
{
if (groupBox1.Controls.Count > 0)
{
UserControl oldView = groupBox1.Controls[0] as UserControl;
groupBox1.Controls.Remove(oldView);
oldView.Dispose();
}
groupBox1.Controls.Add(newView);
newView.Dock = Dock.Fill;
}
在一个按钮中你可以这样做:
private void btnHome_Click(object sender, EventArgs e)
{
if (CanCurrentViewClose())
{
ViewHome v = new ViewHome();
// Further initialization of v here
SwitchView(v);
}
else
{
MessageBox.Show("Current View can not close!");
}
}
我已经在很多场合成功地使用了这种方法。
关于c# - 一个表单中的多个页面? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22322470/