2014-04-09 61 views
0

我有這樣一個數據網格視圖: enter image description here保持數據網格視圖的光標點特定列始終

我對窗口工作application..here司機專欄中,我得給司機id..then我點擊進入..那時光標正在移動下一行釋放按鈕.. 我不想移動光標下一行按鈕..在點擊輸入後,我想讓我的光標移動到下一行驅動程序ID列.. 如何我可以設置標籤順序只在特定的列上。

任何幫助是非常可觀..

+0

您可以創建自己的自定義類,該類派生'DataGridView'並實現'ProcessDataGridViewKey'方法。有關更多信息+示例,請參閱[THIS](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.processdatagridviewkey%28v=vs.110%29.aspx)。 – etaiso

+0

先生,你能給點更多的想法嗎? – user3262364

+0

創建自定義類之後我必須在ProcessDataGridViewKey事件中編寫哪些代碼? – user3262364

回答

0

下面是創建從DataGridView派生的自定義類和設置的ENTER鍵,以便將沿着該行移動行爲的代碼,但跳過最後一列(在OP案例中的按鈕列)

class MyCustomDGV : DataGridView 
{ 
    private int currentCol = 0; 
    private int currentRow = 0; 

    // Store the current cell position. 
    protected override void OnCellEnter(DataGridViewCellEventArgs e) 
    { 
     currentCol = e.ColumnIndex; 
     currentRow = e.RowIndex; 

     base.OnCellEnter(e); 
    } 

    protected override bool ProcessDialogKey(Keys keyData) 
    { 
     // Extract the key code from the key value. 
     Keys key = (keyData & Keys.KeyCode); 

     // Handle the ENTER key as if it were a RIGHT ARROW key. 
     if (key == Keys.Enter) 
     { 
      if (currentCol >= this.ColumnCount - 2) 
      { 
       return this.ProcessEnterKey(keyData); 
      } 
      else 
      { 
       return this.ProcessRightKey(keyData); 
      } 

     } 

     return base.ProcessDialogKey(keyData); 
    } 

    protected override bool ProcessDataGridViewKey(KeyEventArgs e) 
    { 
     // Handle the ENTER key as if it were a RIGHT ARROW key. 
     if (e.KeyCode == Keys.Enter) 
     { 
      if (currentCol >= this.ColumnCount - 2) 
      { 
       return this.ProcessEnterKey(e.KeyData); 
      } 
      else 
      { 
       return this.ProcessRightKey(e.KeyData); 
      } 
     } 
     return base.ProcessDataGridViewKey(e); 
    } 

    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      if (currentCol >= this.ColumnCount - 2) 
      { 
       e.SuppressKeyPress = true; 
       e.Handled = true; 
       this.ProcessEnterKey(e.KeyData); 
       return; 
      } 
      else 
      { 

      } 
     } 

     base.OnKeyDown(e); 
    } 
} 
+0

所以我創建這個類後,我不想在我的網格視圖頁面寫任何代碼? – user3262364

+0

只需將減速度更改爲「MyCustomDGV」。例如,你的舊'DataGridView'被聲明爲:'this.dataGridView1 = new System.Windows.Forms.DataGridView();'現在它成爲:'this.dataGridView1 = new MyCustomDGV();' – etaiso

+0

先生,我寫了一些代碼在我的DGVall_CellEndEdit點擊事件中,現在代碼不起作用 – user3262364

相關問題