2017-07-29 76 views
2

我很感激以下的幫助。使用光標鍵在DataGridView中的DataGridViewCell中移動

我有一個DataGridView窗體,其中有各種文本單元格。自動換行功能已啓用,因此如果單元格的內容長度超過單元格寬度,則單元格內容將自動換行,然後行高將自動調整。

但是,我希望用戶能夠輕鬆地編輯單元格的內容。如果單元格中有大量文本,則從一端到另一端的唯一方法是使用光標鍵RightLeft。如果按下光標鍵UpDown,則會期望它移動到同一單元格內的下一行。但相反Up & Down鍵將Focus當前單元格更改爲下一個相鄰單元格

有什麼辦法可以覆蓋這種行爲,這樣,當在edit模式下,你可以使用UpDownLeftRight鍵將單元格內的導航,而不是圍繞它

我已經試過各種事情,但無濟於事(例如編程單元格內的TextBox的多行屬性編程)。

任何幫助將不勝感激。謝謝。

+0

檢查[this out](http://codemumbler.blogspot.in/2011/02/one-aspect-of-datagridviews-that-you.html) –

+0

感謝發佈。看着那個頁面,它似乎在處理如何在用鍵導航DataGridView時跳過特定的單元格。我試圖在使用按鍵時保持在當前單元格內 - 即按下光標鍵可圍繞*當前單元格中的文本*移動。 – Andrew17856

+0

這是因爲在一個單元格中,你處於它的_edit_模式。因此光標鍵只會移動_selection cursor_。 –

回答

1

這就是問題所在:看here

的文本框的按鍵事件不被解僱,因爲箭頭鍵移動到下一個單元格。

您因而需要創建一個自定義的DataGridView並使用它:

public class EditableDataGridView : DataGridView 
{ 
    protected override bool ProcessDialogKey(Keys keyData) 
    { 
     Keys key = (keyData & Keys.KeyCode); 
     if ((key == Keys.Up || key == Keys.Down) && this.IsCurrentCellInEditMode) 
     { 
      return false; 
     } 
     return base.ProcessDialogKey(keyData); 
    } 

    protected override bool ProcessDataGridViewKey(KeyEventArgs e) 
    { 
     if ((e.KeyCode == Keys.Up || e.KeyCode == Keys.Down) && this.IsCurrentCellInEditMode) 
     { 
      return false; 
     } 
     return base.ProcessDataGridViewKey(e); 
    } 
} 

因爲keyhandlers返回false(即在DataGridView該事件沒有處理)的按鍵向下流到文本框本身。