2013-03-30 90 views
0

我在gridview中有3列 - 代碼,數量,名稱。如果一個單元格(Say代碼)處於編輯模式,按下箭頭或Tab鍵將激發'CellEndEdit'事件,之後將選擇移到下一個單元格。如果它是一個箭頭鍵,我想擁有不同的選定單元格,如果它是選項卡,我想選擇另一個單元格。例如:
在右箭頭鍵:代碼 - >數量
選項卡按:代碼 - >名稱在GridView中管理選項卡索引

DataGridView中的關鍵事件(向下,向上,按)不火一旦細胞進入編輯mode.So,如何當單元格處於編輯模式時,我可以獲取上次按下的鍵的值嗎?我必須在CellEndEdit事件中編寫代碼/方法/函數。可這是這樣的:

private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)  
{ 
    //Some calculations; 
    //Get the key if it is tab or arrow to decide which cell should be selected next 
If((bool)OnKeyDown()==true) 
    then do this; 
}   
void OnKeyDown(KeyEventArgs e) 
{ 
    if(e.KeyValue==9)//tab key  
    return true; 
} 

回答

0

我這樣解決它基於soln。在這裏:
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/0283fe97-c0ad-4768-8aff-cb4d14d48e15/

bool IsTabKey; 
private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)  
{ 
    //Some calculations; 
    //Get the key if it is tab or arrow to decide which cell should be selected next 
    If(IsTabKey==true) 
     //then do this; 
} 
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if(GridViewSale.CurrentCell.ColumnIndex == 1 && keyData == Keys.Tab) 
     IsTabKey = true; 
     return false; 
} 
0

從這個link使用的解決方案,我能拿出的東西,也許能幫助你。

首先,您要創建自己的用戶類,該用戶類源自DataGridView並覆蓋ProcessCmdKey函數。無論您的單元格是否處於編輯模式,此函數都會被調用。

public partial class MyDataGridView : DataGridView 
{ 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Tab) 
     { 
      this.CurrentCell = this.Rows[this.CurrentCell.RowIndex].Cells[1]; 
      return true; 
     } 
     else if (keyData == Keys.Right) 
     { 
      this.CurrentCell = this.Rows[this.CurrentCell.RowIndex].Cells[2]; 
      return true; 
     } 
     else 
      return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

所有你現在需要做的是改變這個函數裏面的邏輯去相應的列取決於其已被按下的鍵,並使用這個自定義類,而不是默認DataGridView的。

+0

謝謝Mash.Sorry是沒有幫助。我已經有幾行代碼說gridview1.rows,gridview1.currentrow等。所以粘貼類gridview1:DataGridView拋出錯誤(或者,也許我做錯了)。我還有重要的事件可以進行。這個程序會不會影響他們。所以,我正在尋找一個簡單的替代品。再次感謝你。 – Ruby