как предотвратить фокусировку / активацию определенной формы mdichild при переключении между другими формами mdichild с помощью Ctrl + Tab?C # - PullRequest
1 голос
/ 28 сентября 2011

В моем приложении mdi у меня есть четыре формы mdichild, одна из которых используется в качестве фона и содержит некоторые элементы управления.

Как предотвратить фокусировку / активацию этой фоновой формы mdichild при переключении между другими формами mdichild с помощью Ctrl + Tab?

Другими словами, как пропустить эту фоновую дочернюю форму mdi из последовательности Ctrl + Tab? а также сделать его z-порядок последним, чтобы он не скрывал другие формы mdichild при переключении между ними?

Заранее спасибо.

1 Ответ

0 голосов
/ 02 октября 2011

Переопределив 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];
    }
...