0
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();
        }
    }

私はC#の初心者で、ウィンドウアプリケーションに取り組んでいます.windowOneが開いているときに、ユーザーがwindowTwoを開けなかったらいいのにと思います.

4

2 に答える 2

1

その時点で開いているウィンドウに応じてメニュー項目1/2のいずれかを無効にし、ウィンドウを閉じたら再度有効にすることができます

menuItem1.Enabled = false;
于 2013-04-03T08:34:36.343 に答える
0

開く前に両方のウィンドウを確認し、いずれかが開いている場合は正しいウィンドウに焦点を合わせます。このような:

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;
}

その後、次のように使用できます。

if (!IsWindowOpen())
{
    // Open window
    Two = new windowTwo();
    Two.MdiParent = this;
    Two.FormClosed += (o, ea) => Two = null;
    Two.Show();
}
于 2013-04-03T08:32:35.473 に答える