一个表格中有多个页面? C#

时间:2014-03-11 10:08:40

标签: c# winforms

我暂时没有这样做,所以我不太确定如何做我需要的,但我相信这很简单。

基本上,我有一个带导航窗格的表单。我想这样做当用户点击该窗格上的按钮时,说“主页”它会更改表单上的内容,但实际上并没有切换到另一个表单,如果你找到我的话?

同样,我希望导航窗格保持整个时间,我只希望更改表单的内容。它几乎就像Visual Studio的'Toolbox'中的'TabControl'工具,虽然不是直接位于内容上方的标签,但我希望它们是侧窗格中显示的按钮。请参阅下图以获得更好的理解。谢谢!

(无论按下什么按钮,侧窗格和标题都保持不变,但内容会发生变化。)

Form

3 个答案:

答案 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即可拥有TabPagesTabControl。对于Alignment,您可以将Left属性设置为{{1}}