2016-11-27 61 views
0

我有一個使用c#的Windows應用程序。我創建了一個表格frmMain它加載當用戶登錄時,有4個選項像客戶創造供應商創造員工創造用戶創建維護用戶控件的焦點Windows應用程序

Situation example

該用戶工作正常。

問題出現在焦點。當用戶加載Customer用戶控件並填充一些數據並讓我們假設用戶位於第4個控件(Textbox/Combobox或任何其他Windows窗體輸入控件)時突然點擊CreateUser,然後CreateUser控制負載,但焦點仍然在用戶控制Customer中的第4個控件。

我想要的是將焦點集中在當前用戶控件所在的位置,如果它是新加載的,則將焦點放在默認控件上。

請檢查我現在用的是代碼,

// this method gets called if the form was opened earlier 
    private void ShowOpenForm(ControlItem _item) 
     { 
      try 
      { 
       //Get item from menu 
       ControlItem _menuI = null; 
       foreach (ToolStripmenuI menuI in tsmenuWindow.DropDownItems) 
       { 
        _menuI = (ControlItem)menuI.Tag; 
        if (_menuI.Control.Name.ToLower() == _item.Control.Name.ToLower()) 
        { 
         break; 
        } 
        _menuI = null; 
       } 
       if (_menuI != null) 
       { 
        WmenuI_ClearAllSelection(); 
        for (int index = 0; index < PnlUserCtrl.Controls.Count; index++) 
        { 
         Control ctl = PnlUserCtrl.Controls[index]; 
         if (ctl.Name.ToLower() == _menuI.Control.Name.ToLower()) 
         { 
          ctl.Visible = true; 
          ctl.BringToFront(); 


          break; 
         } 
        } 
        WmenuI_SetCurrentItemChecked(_menuI); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 









//User can navigate to opened items from menu as well 

    private void WindowMenuItem_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       ControlItem _item = (ControlItem)((ToolStripMenuItem)sender).Tag; 
       WmenuI_ClearAllSelection(); 
       for (int index = 0; index < PnlUserCtrl.Controls.Count; index++) 
       { 
        Control ctl = PnlUserCtrl.Controls[index]; 
        if (ctl.Name.ToLower() == _item.Control.Name.ToLower()) 
        { 
         ctl.Visible = true; 
         ctl.BringToFront(); 
         if (ctl is BaseControl) 
         { 
          ((BaseControl)ctl).SetFocus(); // This sets the focus to default textbox 
         } 

         break; 
        } 
       } 
       WmenuI_SetCurrentItemChecked(_item); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

但是這一套專注於默認文本框。不在從用戶移動到其他用戶控件的位置進行控制。

+1

只需將重點放在用戶控件上。由於UserControl從不需要焦點,它會自動將焦點移動到具有最低TabIndex的控件。 –

回答

0

爲了獲得更好的答案,在您的問題中提供一些代碼是一種很好的做法。 您可以使用SetFocus()方法根據需要手動操作焦點。對於你的問題,我相信你可以有一個Control類型的對象,那麼你可以將它設置爲你想要關注的默認控件。然後,處理所有控件的GotFocus方法並設置該對象的值。 只要你想焦點恢復到最後一項,你可以撥打[your object].SetFocus()。 這只是一個想法。看看它是否有幫助。

+0

這是可怕的建議。切勿改變GotFocus事件處理程序中的焦點!這在MSDN文檔中明確地被調出。 –

+0

@CodyGray誰說你應該這樣做?我說你設定了一個焦點的對象,以保持焦點所在的最後一個項目。然後SetFocus將在創建用戶引發的另一個事件中調用。 – Emad