Form2 form2 = new Form2();
private void aboutoldtrafford_MouseClick(object sender, MouseEventArgs e)
{
this.Hide();
form2.ShowDialog();
this.Show();
}
我可以去form2,那里有两个按钮:back和next
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();
}
后退按钮将返回到form1,下一个按钮将返回到form3。下面是我的form3代码。 在form3中,有两个按钮:后退和完成
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
}
后退按钮将返回到form2,完成按钮将返回到form1。 显然,我不能做“this.DialogResult = DialogResult.OK;”在完成按钮。 如何在不进入form2的情况下返回form1?请帮忙......
答案 0 :(得分:1)
第一个选项 - 您可以使用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;
}
此外,您可以动态创建表单,使用配置文件进行状态定义等。
祝你好运!