我暂时没有这样做,所以我不太确定如何做我需要的,但我相信这很简单。
基本上,我有一个带导航窗格的表单。我想这样做当用户点击该窗格上的按钮时,说“主页”它会更改表单上的内容,但实际上并没有切换到另一个表单,如果你找到我的话?
同样,我希望导航窗格保持整个时间,我只希望更改表单的内容。它几乎就像Visual Studio的'Toolbox'中的'TabControl'工具,虽然不是直接位于内容上方的标签,但我希望它们是侧窗格中显示的按钮。请参阅下图以获得更好的理解。谢谢!
(无论按下什么按钮,侧窗格和标题都保持不变,但内容会发生变化。)
答案 0 :(得分:4)
我将使用UserControl
来实现此功能。单击按钮时会显示一个UserControl
。我创建了一个接口(例如IView
),它将由声明常用功能的每个UserControl
实现,例如检查是否可以从一个切换到另一个的方法(如表单的像这样的OnClosing事件:
public interface IView
{
bool CanClose();
}
public UserControl View1: IView
{
public bool CanClose()
{
...
}
}
public UserControl View2: IView
{
public bool CanClose()
{
...
}
}
然后,切换视图非常简单:
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!");
}
}
我在很多场合都成功地使用了这种方法。
答案 1 :(得分:3)
最简单的方法是将多个Panel放置为内容持有者,实现内容管理器,该内容管理器保持对Panel的引用,并显示/隐藏所需的面板。
很简单,但对于较小的应用程序,它可以正常工作
答案 2 :(得分:0)
您只需使用TabControl
即可拥有TabPages
个TabControl
。对于Alignment
,您可以将Left
属性设置为{{1}}