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

时间:2016-02-06 07:51:28

标签: c# .net winforms

当子表单处于活动状态时,如何锁定(并使其看起来褪色)父表单?我试图让孩子形成最顶层,但只是让它始终可见,我仍然可以编辑父窗体。我想在子窗体运行VS2012,C#时无法在主窗体上操作。这是我用来调用第二种形式的代码......

private void checkButton_Click(object sender, EventArgs e)
{
    Form2 newForm = new Form2(this);
    newForm.Show();
}

4 个答案:

答案 0 :(得分:1)

一种非常简单的方法是在子表单上使用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

答案 1 :(得分:0)

只需为当前正在运行的表单添加隐藏()

 private void checkButton_Click(object sender, EventArgs e)
            {
                Form2 newForm = new Form2(this);
                this.Hide();//hide old form
                newForm.Show();
            }

答案 2 :(得分:0)

您可以使用Form.ShowDialog创建将在父窗体顶部打开的对话框,并且在关闭子窗口之前不允许编辑父窗口

private void checkButton_Click(object sender, EventArgs e)
        {
            Form2 newForm = new Form2(this);
            newForm.ShowDialog(this);
        }

答案 3 :(得分:0)

你可能想在单独的线程中运行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();
        }
    }
}