Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 4.0 当窗口A打开时,限制打开窗口B_C# 4.0_C# 3.0 - Fatal编程技术网

C# 4.0 当窗口A打开时,限制打开窗口B

C# 4.0 当窗口A打开时,限制打开窗口B,c#-4.0,c#-3.0,C# 4.0,C# 3.0,我是c#的初学者, 我正在使用窗口应用程序,我希望当windowOne打开时,用户不能打开Window2,我使用上述代码避免再次打开windowOne或Window2。打开前检查两个窗口,如果其中一个窗口打开,则聚焦正确的窗口。像这样: public partial class MainMenu : Form { public MainMenu() { InitializeComponent(); } windowOne One; wind

我是c#的初学者,
我正在使用窗口应用程序,我希望当windowOne打开时,用户不能打开Window2,我使用上述代码避免再次打开windowOne或Window2。

打开前检查两个窗口,如果其中一个窗口打开,则聚焦正确的窗口。像这样:

public partial class MainMenu : Form
{
    public MainMenu()
    {
        InitializeComponent();
    }
    windowOne One;
    windowTwo Two;
    private void OneToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (One != null)
        {
            One.WindowState = FormWindowState.Normal;
            One.Focus();
        }
        else
        {
            One = new windowOne();
            One.MdiParent = this;
            One.FormClosed += (o, ea) => One = null;
            One.Show();
        }
    }

    private void TwoToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (Two != null)
        {
            TwoWindowState = Two.Normal;
            Two.Focus();
        }
        else
        {
            Two = new windowTwo();
            Two.MdiParent = this;
            Two.FormClosed += (o, ea) => Two = null;
            Two.Show();
        }
    }

编辑:由于这些代码块完全相同,因此最好将它们分解到各自的方法中

if (One != null)
{
    One.WindowState = FormWindowState.Normal;
    One.Focus();
}
else if (Two != null)
{
    Two.WindowState = FormWindowState.Normal;
    Two.Focus();
}
else
{
    // Show the window
}
然后您可以这样使用它:

public bool IsWindowOpen()
{
    if (One != null)
    {
        One.WindowState = FormWindowState.Normal;
        One.Focus();
    }
    else if (Two != null)
    {
        Two.WindowState = FormWindowState.Normal;
        Two.Focus();
    }
    else
    {
        return false;
    }
    return true;
}

您可以根据当时打开的窗口禁用菜单项1/2,然后在关闭窗口后再次启用

if (!IsWindowOpen())
{
    // Open window
    Two = new windowTwo();
    Two.MdiParent = this;
    Two.FormClosed += (o, ea) => Two = null;
    Two.Show();
}

不,但这只满足了一个要求,但我希望当第一扇窗户打开时,窗户不能打开,我不知道。很好的选择,我从来没有想过。。thanx没问题,别忘了接受答案,尽可能地点击勾号。thanx兄弟。。很有帮助。。但这又产生了另一个问题,即。。当你打开条带中的每个菜单项时,它会禁用窗口中的所有菜单项。我不确定你的意思。我的意思是,当你打开一个表单时,先关闭那个表单,再打开两个表单,然后再关闭那个表单,之后你就无法打开一个或两个表单中的任何一个。。!!是的,还有一个更好的方法。。但是你认为什么不会使它变得复杂呢?这是根据选择的窗口禁用菜单项的最简单的方法。只是不要忘记在关闭窗口时重新启用菜单项
menuItem1.Enabled = false;