c#浏览或跳过表单

本文关键字:表单 浏览 | 更新日期: 2023-09-27 17:58:45

我之前学习了如何在两种形式之间来回移动。但如果有更多的形式呢?这是我的form1:代码

    Form2 form2 = new Form2();
    private void aboutoldtrafford_MouseClick(object sender, MouseEventArgs e)
    {
        this.Hide();
        form2.ShowDialog();
        this.Show();
    }

我可以转到2号窗体,那里有两个按钮:后退和下一个

     private void backbutton_MouseClick(object sender, MouseEventArgs e)
    {
        this.DialogResult = DialogResult.OK;
    }
    Form3 form3 = new Form3();
    private void nextbutton_MouseClick(object sender, MouseEventArgs e)
    {
            this.Hide();
            form3.ShowDialog();
            this.Show();
    }

后退按钮将返回到表格1,下一个按钮将转到表格3。下面是我的form3代码。在表格3中,有两个按钮:后退和完成

    private void back_MouseClick(object sender, MouseEventArgs e)
    {
        this.DialogResult = DialogResult.OK;
    }
    private void finish_MouseClick(object sender, MouseEventArgs e)
    {
        this.Hide();
        // i want to go back to form1
    }

后退按钮将返回到表格2,完成按钮将返回表格1。显然,我不能在完成按钮中执行"this.DialogResult=DialogResult.OK;"。我怎么能回到一年级而不去二年级呢?请帮忙。。。

c#浏览或跳过表单

第一个选项-您可以使用UserControls而不是Forms,只需对要激活的控件调用BringToFront()。

另一个选项-将应用程序状态管理移动到某个对象。创建状态映射

public class StateManager
{
   private Dictionary<ApplicationState, Form> _stateMap = new Dictionary<ApplicationState, Form>();
   private ApplicationState _currentState;
    public void RegisterState(ApplicationState state, Form form)
    {
        if (_stateMap.ContainsKey(state))
            // throw an exception, or rewrite mapping
       _stateMap.Add(state, form);
    }
    public ApplicationState CurrentState
    {
        get { return _currentState; }
        set
        {
            if (!_stateMap.ContainsKey(value))
                // do nothing or throw exception
            if (_currentState == value)
                return;                
            CurrentForm.Hide();                
            _currentState = value;
            CurrentForm.Show();
        }
    }
    public Form CurrentForm
    {
        get { return _stateMap[_currentState]; }
    }
}

我在这里使用表单实例,但您可以通过工厂创建实例。

下一步-注册应用程序的状态(当然,您应该为应用程序状态提供更有意义的名称):

StateManager stateManager = StateManager.Instance;
stateManager.RegisterState(ApplicationState.Form1, new Form1());
stateManager.RegisterState(ApplicationState.Form2, new Form2());
stateManager.RegisterState(ApplicationState.Form3, new Form3());

设置当前状态并运行应用程序:

stateManager.CurrentState = ApplicationState.Form1;
Application.Run(stateManager.CurrentForm);

最后一步-更改应用程序状态。您可以将stateManager实例传递给窗体构造函数,或者使用静态Singleton:

private void previousButton_Click(object sender, EventArgs e)
{
   StateManager.Instance.CurrentState = ApplicationState.Form1;
}

此外,您可以动态创建表单,使用配置文件进行状态定义等。

祝你好运!