1

私のmdiアプリケーションでは、4つのmdichildフォームがあり、そのうちの1つは背景として使用され、いくつかのコントロールを保持しています。

Ctrl + Tabを使用して他のmdichildフォームを切り替えるときに、この背景のmdichildフォームがフォーカス/アクティブ化されないようにするにはどうすればよいですか?

言い換えれば、Ctrl + Tabシーケンスからこの背景のmdi子フォームをスキップする方法は?また、zオーダーを最後にして、他のmdichildフォームを切り替えたときに非表示にならないようにしますか?

前もって感謝します。

4

1 に答える 1

0

Form.ProcessCmdKeyをオーバーライドし、バックグラウンドフォームをスキップします。

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if ((keyData & Keys.Tab) == Keys.Tab && (keyData & Keys.Control) == Keys.Control)
        {

            Form nextForm = GetNexMdiChildForm();
            if (nextForm != null)
            {
                nextForm.Activate();
                return false;
            }
        }

        return base.ProcessCmdKey(ref msg, keyData);
    }

    private Form GetNexMdiChildForm()
    {
        //get current form index
        Form currentForm = this.ActiveMdiChild;
        int currentFormIndex = Array.IndexOf(this.MdiChildren, currentForm);

        //get next form index
        int nextFormIndex = currentFormIndex + 1;
        if (this.MdiChildren.Length == nextFormIndex)
        {
            nextFormIndex = 0;
        }

        //check if next form is Form 3
        if (this.MdiChildren[nextFormIndex] == background_mdichild_form )
        {
            nextFormIndex++;
            if (this.MdiChildren.Length == nextFormIndex)
            {
                nextFormIndex = 0;
            }
        }
        return MdiChildren[nextFormIndex];
    }
于 2011-10-02T13:19:15.120 に答える