2011-09-28 32 views
1

以我MDI應用我四種mdichild形式,它們中的一個被用作背景和保持某些控件..如何使用Ctrl + Tab在其他mdichild窗體之間切換時防止某個mdichild窗體變得焦點/激活? C#

如何防止獲得聚焦/激活此背景mdichild形式使用其他mdichild形式之間進行切換時Ctrl + Tab鍵?

換句話說如何從Ctrl + Tab序列跳過這個背景mdi子窗體?並且使它的z順序成爲最後一個,這樣它們在切換它們時不會隱藏其他mdichild窗體?

在此先感謝。

回答

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]; 
    } 
相關問題