2011-08-06 50 views
0

這是我爲您帶來的真正挑戰。如果可以的話,解決它。自定義DGV上的不可能任務將焦點設置爲下一步按下輸入按鍵控制

輸入密鑰在Datagridview它是好主意嗎?或者是否有可能讓這裏的任何機構按照以下條件進行工作?

如果不是Datagridview Control在輸入按鍵上沒用。

我有以下的自定義DGV:

public class MyDataGridView : DataGridView 
    { 
     protected override bool ProcessDialogKey(Keys keyData) 
     { 
      Keys key = (keyData & Keys.KeyCode); 
      if (key == Keys.Enter) 
      { 
       Tab(keyData); 
       return true; 
      } 
      return base.ProcessDialogKey(keyData); 
     } 
     protected override bool ProcessDataGridViewKey(KeyEventArgs e) 
     { 
      if (e.KeyCode == Keys.Enter) 
      { 
       Tab(e.KeyData); 
       return true; 
      } 
      return base.ProcessDataGridViewKey(e); 
     } 
     private void Tab(Keys KeyData) 
     { 
      Point cca = CurrentCellAddress; 
      bool Forward = ((KeyData & Keys.Shift) != Keys.Shift); 
      if (Forward) 
       if (cca.Y == Rows.Count - 1)   // last row? 
        if (cca.X == Columns.Count - 1)  // last column? 
         ToNextControl(Forward); 
        else 
         ProcessTabKey(KeyData); 
       else 
        ProcessTabKey(KeyData); 
      else 
       if (cca.Y == 0)   // first row? 
        if (cca.X == 0)  // first column? 
         ToNextControl(Forward); 
        else 
         ProcessTabKey(KeyData); 
       else 
        ProcessTabKey(KeyData); 
     } 

     /// <summary> 
     /// Go to the next control, forward or backword. This does not support 
     /// wrapping from the first to the last or the last to the first. 
     /// </summary> 
     /// <param name="Forward">Whether to go forward</param> 
     private void ToNextControl(bool Forward) 
     { 
      Control c = Parent.GetNextControl(this, Forward); 
      while (c != null && !c.TabStop) // get next control that is a tabstop 
       c = Parent.GetNextControl(c, Forward); 
      if (c != null) 
       c.Select(); 
     } 
    } 

同樣的工作以及對正常它允許專注於下一個控件在輸入按鍵,但是如果設置AllowUserToAddRows =在數據綁定模式假它不能正常工作。編輯最後一列的單元格值時會出現確切的問題,並按Enter鍵不允許將焦點設置爲下一個控件。

如何克服這一點?如何解決這個問題?

回答

1

我發現一個解決方案,應該爲你工作,通過在當前控件上添加焦點事件。我認爲這是你想要的,但不能真正理解你的問題。讓我知道它是不同的。它適用於AllowUserToAddRows = falsetrue

private void ToNextControl(bool Forward) 
    { 
     Control c = Parent.GetNextControl(this, Forward);   
     while (c != null && !c.TabStop) // get next control that is a tabstop 
      c = Parent.GetNextControl(c, Forward); 
     if (c != null) 
     { 
      //c.Select(); // Not needed for it to work 
      c.Focus(); // force it to focus 
     } 
    } 
+0

是真,這是我的作品。但是,你能告訴我爲什麼它不適用於我的情況嗎? – mahesh

+0

...我的意思是根據我的舊代碼爲什麼它不起作用?爲什麼需要武力來關注。 – mahesh

+0

在這裏找到答案:http://stackoverflow.com/questions/802722/whats-the-difference-between-control-select-and-control-focus – Moop

0

我看到的只是看代碼,但不運行它的問題是這樣的:

用戶獲取到在DataGridView最後的控制並沒有控制GetNextControl返回。

您可能想添加的是處理這種情況的一些邏輯。例如,如果這是一個嚮導形式,您可以將焦點設置爲提交或下一個按鈕。

相關問題