在主窗体和弹出窗体之间切换
本文关键字:窗体 之间 | 更新日期: 2023-09-27 18:33:31
如何在子窗体处于活动状态时锁定(并使其看起来褪色)父窗体?我试图使子窗体最顶层,但这只是使其始终可见,我仍然可以编辑父窗体。我希望当子窗体在VS2012,C#中运行时无法在主窗体上操作。这是我用来调用第二个形式的代码...
private void checkButton_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2(this);
newForm.Show();
}
一种非常简单的方法是在子窗体上使用ShowDialog()
而不是Show()
。 这将阻止与主窗体的任何交互。 这也是传递结果的一种巧妙方式。 当然,还有许多其他方法。
例:
private void checkButton_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2(this);
newForm.ShowDialog();
}
有关更多详细信息,请参阅 MSDN:https://msdn.microsoft.com/en-us/library/c7ykbedk(v=vs.110).aspx
只需为当前运行表单添加 hide(),
private void checkButton_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2(this);
this.Hide();//hide old form
newForm.Show();
}
您可以使用
Form.ShowDialog创建对话框,该对话框将在父窗体的顶部打开,并且在关闭子窗体之前不允许编辑父窗体
private void checkButton_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2(this);
newForm.ShowDialog(this);
}
您可能希望在单独的线程中运行 form2 并设置 topmost = true,form1 将不受阻止地运行,但 form2 也将运行您想要的任何内容。这是你想要的吗?
namespace TestModal
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Thread thrd = new Thread(newwindow);
thrd.IsBackground = true;
thrd.Start();
}
private void newwindow()
{
Form2 frm2 = new Form2();
frm2.TopMost = true;
frm2.ShowDialog();
}
}
}