返回面板(C#)winform中的上一个表单

时间:2019-04-18 13:11:17

标签: c# winforms

我有一个仪表板面板,我可以在其中发送和处理表格。 在侧面的按钮上,他们将表单发送到仪表板面板,在用户完成工作之后,他们单击另一个按钮,将另一个表单发送到仪表板。我如何使用“后退”按钮返回上一个表格。 假设(员工详细信息)按钮将表格发送到仪表板面板, 完成工作后,用户单击(所有员工),新表格进入面板。 现在的问题是我有一个“后退按钮” ,那么如何将以前的表单(在本例中为“ Employee Detail”)放入仪表板。

我尝试过在主表单中使用静态表单,但是以这种方式,我只能返回一个阶段。 例如:  (员工详细信息)  (所有员工)

但是如果行中有多个表单怎么办

(员工详细信息表) (所有员工表格) (删除员工表格) (等等)

命名空间Agency.Forms {

public partial class MainMenuForm : Form
{
    public static Form StaticForm;       

    private void UpdateDashBoardForm(Form myform)    //use to get form and add to panel
    {
        if (myform == null)
        {
            return;
        }
        ClearDashBoard();
        myform.TopLevel = false;
        DashBaordPanel.Controls.Add(myform);
        myform.Dock = DockStyle.Fill;
        myform.Show();
    }

    private void ClearDashBoard()
    {

        foreach (Form item in DashBaordPanel.Controls)
        {

            if (!item.Equals(StaticForm))
            {
                item.Dispose();
            }
            else
            {
                item.Visible = false;
            }

        }
    }
}

我希望后退按钮可以获取以前添加到仪表板的所有表单,例如表单应存储在堆栈中,单击后退按钮应从堆栈中获取最多的表单并从堆栈中弹出。 enter image description here

帮助: 我需要2个功能 1)将表单添加到静态列表中。void addForm(Form obj);

2)将返回列表中最近的表单并将其从列表Form getForm();

中删除

1 个答案:

答案 0 :(得分:1)

所以到此为止,您要为该课程提供下一个表格(myform),然后显示该表格并处置当前的课程StaticForm,对吗?

您可以做的是将StaticForm添加到列表中,当您“建立”历史记录时,该列表会不断添加。然后,当您要使用“后退”按钮时,您只需查找历史记录中的最后一个表单,然后调用该表单即可。

示例代码:

List<Form> FormHistory = new List<Form>( );
public static Form StaticForm;

private void UpdateDashBoardForm(Form myform)    //use to get form and add to panel
{
    FormHistory.Add( StaticForm );

    // Plus Your code.
}

private void GoBackToPreviousForm()
{
    if( FormHistory.Count > 0 )
    {
        // Plus what ever you need to do to go to the next form.
        FormHistory[ FormHistory.Count - 1 ].Show( );
        FormHistory.RemoveAt( FormHistory.Count - 1 );
    }
    else
    {
        // You are at the first loaded form.
    }
}