Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在主窗体和弹出窗体之间切换_C#_.net_Winforms - Fatal编程技术网

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

C# 在主窗体和弹出窗体之间切换,c#,.net,winforms,C#,.net,Winforms,如何在子窗体处于活动状态时锁定(并使其看起来褪色)父窗体?我试图使子窗体位于最上面,但这只是使它始终可见,而且我仍然可以编辑父窗体。我希望在VS2012,C#中运行子窗体时无法对主窗体进行操作。这是我用来调用第二个表单的代码 private void checkButton_Click(object sender, EventArgs e) { Form2 newForm = new Form2(this); newForm.Show(); } 只需为当前运行的表单添加Hide

如何在子窗体处于活动状态时锁定(并使其看起来褪色)父窗体?我试图使子窗体位于最上面,但这只是使它始终可见,而且我仍然可以编辑父窗体。我希望在VS2012,C#中运行子窗体时无法对主窗体进行操作。这是我用来调用第二个表单的代码

private void checkButton_Click(object sender, EventArgs e)
{
    Form2 newForm = new Form2(this);
    newForm.Show();
}
只需为当前运行的表单添加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);
        }

一种非常简单的方法是在子窗体上使用
ShowDialog()
而不是
Show()
。这将阻止与主窗体的任何交互。这也是一种传递结果的好方法。当然,还有很多其他的方法

例如:

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

有关更多详细信息,请参见MSDN:

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

这个问题与VisualStudio有什么关系?在另一个编辑器中会有所不同吗?为什么它没有用Windowm、XAML或任何其他相关的标签进行标记?它只是为了清晰起见,这就是我正在使用的IDE,如果它如此麻烦,为什么不忽略它呢???@TomTom让我们不要在这里发疯。你可以编辑这个问题,看看他是如何成为一个新用户。这正是我想要的方式。我还想知道我处理的数据是否可以保存/传递回原始表单,甚至是文本文件/数据库?@Sensei是的,但所有这些都是不同的事情,可以以不同的方式处理。例如,如果希望返回除ShowDialog()方法返回的枚举以外的结果,则可以在弹出窗体中创建一个公共方法,例如
ShowDialogWithResults()
,该方法在其中使用
ShowDialog()
,然后将结果返回到主窗体。您可以在这里看到它的可能实现:我想这是可行的,因为可能出现的唯一问题是,每次我终止子表单时,都会创建父表单的新实例,因此我最终得到相同表单的副本。