在主窗体和弹出窗体之间切换

本文关键字:窗体 之间 | 更新日期: 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();
        }
    }
}