我有两个表单,子表单由 Form1 中的 buttonClick 调用/创建。现在我可以启动子窗体,隐藏 Form1,然后在子窗体关闭时取消隐藏 Form1。我希望能够做的是:
- 如果用户点击 changeform 按钮,检查子表单是否处于事件状态但隐藏
- 如果不是,则启动子窗体,否则隐藏窗体1,取消隐藏子窗体并将控制权交给它
- 如果用户点击 subForm 的 changeform 按钮,隐藏 subForm,取消隐藏 Form1 并将控制传递给它
- 如果用户单击表单右上角的“X”,则关闭应用程序,无论哪个表单处于事件状态。 (现在,选择“X”会关闭子窗体并打开/取消隐藏 Form1。)
我可以找到满足部分要求的解决方案(也许是全部,我太菜鸟了,不知道)。在这里重复我之前的问题,我目前拥有的代码是:
表格 1
private void countClick(object sender, EventArgs e)
{
this.Hide();
subForm myNewForm = new subForm();
myNewForm.ShowDialog();
this.Show();
countSelect.Checked = false;
}
和子表单
private void totalClick(object sender, EventArgs e)
{
this.Close();
}
这可行,但不是很优雅。
最佳答案
我认为最好的方法是滚动你自己的 ApplicationContext
。这允许您完全控制应用程序的生命周期,而无需将其绑定(bind)到特定的窗口。参见 http://msdn.microsoft.com/en-us/library/ms157901.aspx获取更多信息。
这是一个例子:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyApplicationContext());
}
}
public class MyApplicationContext : ApplicationContext
{
public MyApplicationContext()
{
ShowForm1();
}
public void ShowForm1()
{
if (_form2 != null)
_form2.Hide();
if (_form1 == null)
{
_form1 = new Form1(this);
_form1.FormClosed += OnFormClosed;
}
_form1.Show();
MainForm = _form1;
}
public void ShowForm2()
{
if (_form1 != null)
_form1.Hide();
if (_form2 == null)
{
_form2 = new Form2(this);
_form2.FormClosed += OnFormClosed;
}
_form2.Show();
MainForm = _form2;
}
private void OnFormClosed(object sender, FormClosedEventArgs e)
{
if (_form1 != null)
{
_form1.Dispose();
_form1 = null;
}
if (_form2 != null)
{
_form2.Dispose();
_form2 = null;
}
ExitThread();
}
private Form1 _form1;
private Form2 _form2;
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public Form1(MyApplicationContext context)
: this()
{
_context = context;
}
private void button1_Click(object sender, EventArgs e)
{
if (_context != null)
_context.ShowForm2();
}
private readonly MyApplicationContext _context;
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public Form2(MyApplicationContext context)
: this()
{
_context = context;
}
private void button1_Click(object sender, EventArgs e)
{
if (_context != null)
_context.ShowForm1();
}
private readonly MyApplicationContext _context;
}
关于c# - 隐藏主窗体,启动新窗体,在不关闭第二窗体的情况下在两者之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17429464/