如何处理多个页面或表单

Posted

技术标签:

【中文标题】如何处理多个页面或表单【英文标题】:How to work with multiple pages or forms 【发布时间】:2011-11-19 16:50:09 【问题描述】:

我正在尝试创建一个窗口,在该窗口上我会有一个带有不同按钮的工具栏。

当我点击其中一个按钮时,它会显示一些关于某人的信息,或者当我点击另一个按钮时,它会显示一些关于员工的其他信息。

我该怎么做。我可以添加页面,然后在该按钮需要它时将该页面插入到网格或面板中吗?

或者我是否应该只制作多个面板并将它们全部创建在一个窗口上(但如果我这样做,当它们彼此堆叠在一个窗口中时,我如何轻松编辑每个面板)。我希望我很清楚这一点,Idk 怎么问这个问题。任何帮助表示赞赏。

另外,我如何停靠某些东西,以便在最大化或最小化时调整自身大小?

【问题讨论】:

【参考方案1】:

一种方法是创建另一个表单并通过按钮事件打开它:

public partial class Form1 : Form

    public Form1()
    
        InitializeComponent();
    

    private void button1_Click(object sender, EventArgs e)
    
        Form2 form2 = new Form2();
        form2.Show();
    

如果您希望所有内容都在一个窗口中,您可以创建一个用户控件并将其添加到第一个窗口:

public partial class Form1 : Form

    public Form1()
    
        InitializeComponent();
    

    private void button1_Click(object sender, EventArgs e)
    
        UserControl1 control = new UserControl1();
        control.Dock = DockStyle.Fill;
        this.Controls.Add(control);
    

另一种选择是使用子表单:

public partial class Form1 : Form

    public Form1()
    
        InitializeComponent();
        this.IsMdiContainer = true;
    

    private void button1_Click(object sender, EventArgs e)
    
        Form2 form2 = new Form2();
        form2.MdiParent = this;
        form2.Show();
    

【讨论】:

是的,这可以工作,但我不想弹出一个新窗口。我试图将所有内容都保存在一个窗口中。几乎像 tabControl,但创建了我自己的带有工具栏的标签系统。 用户控件是您放在一起的控件的集合,并且可以像任何其他标准控件一样在任何地方重复使用。您当然可以使用面板并以相同的方式处理它们(在第二个示例中,将 UserControl 替换为 Panel)。将其全部放在 userControl 中更易于管理,因为您不必在主窗体中声明每个面板及其组件。【参考方案2】:

为您拥有的每个按钮创建一个面板。那么:

panelx.Dock = DockStyle.Fill; //this will fill the window.

然后将您想要为该按钮显示的所有内容放在该面板上。

当你想显示时,说 panel2 而不是 panel1:

panel1.Hide();
panel2.Show();

【讨论】:

【参考方案3】:

如前所述,这可以使用选项卡控件来实现。

      public ParentForm()
    
        TabControl tabcontrol1 = new TabControl();
        tabcontrol1.Dock = DockStyle.Top;
        TabPage tab1 = new TabPage("Form1 Name");
        Form1 frm1 = new Form1();
        frm1.TopLevel = false;
        frm1.Parent = tab1;
        frm1.Visible = true;
        tabcontrol1.TabPages.Add(tab1);

        Form2 frm2 = new Form2();
        TabPage tab2 = new TabPage("Form2 Name");
        frm2.TopLevel = false;
        frm2.Parent = discotab;
        frm2.Visible = true;
        tabcontrol1.TabPages.Add(discotab);
    

使用“堆叠”的自定义用户控件

    public ParentForm()
    
        InitializeComponent();
        MyUserControl1 control1 = new MyUserControl1();
        control1.Dock = DockStyle.Bottom;
        control1.BringToFront();
    
    private void button1_Click(object sender, EventArgs e)
    
        MyUserControl2 control2 = new MyUserControl2();
        control2.Dock = DockStyle.Bottom;
        control2.BringToFront();
    

【讨论】:

【参考方案4】:

我不久前在 Windows 窗体中实现了一个“分页选项”对话框。我关于它的博文在这里:http://www.differentpla.net/content/2004/10/implementing-a-paged-options-dialog(不过图片不见了)。

【讨论】:

如果我在我的项目中添加一个页面,然后将数据网格和列表视图之类的信息放在那里等等..当我点击一个按钮或更好时,如何在主窗口中显示该页面你没有告诉我怎么做,但是否可以做到

以上是关于如何处理多个页面或表单的主要内容,如果未能解决你的问题,请参考以下文章

如何处理单个页面上的多个异步错误?

如何处理包含 500 多个项目的 Symfony 表单集合

Puppeteer:如何处理多个标签?

php 通过POST传多个值 如何处理

在 Rails 中,如何处理多个选中的复选框,只在 , 或?

c# FileSystemWatcher如何处理多个文件?