Dot-Net
DataGridView:如何使輸入鍵添加新行而不是更改目前單元格?
如何使 Enter 鍵在 Winforms 中的行為
DataGridViewTextBoxCell像在普通 Winforms 中一樣TextBox(在文本中添加新行,而不是更改目前單元格)?
好吧,我找到了解決問題的方法。首先,創建一個
CustomDataGridViewTextBoxEditingControl派生自的類DataGridViewTextBoxEditingControl,並像這樣覆蓋EditingControlWantsInputKey:public class CustomDataGridViewTextBoxEditingControl : DataGridViewTextBoxEditingControl { public override bool EditingControlWantsInputKey( Keys keyData, bool dataGridViewWantsInputKey) { switch (keyData & Keys.KeyCode) { case Keys.Enter: // Don't let the DataGridView handle the Enter key. return true; default: break; } return base.EditingControlWantsInputKey(keyData, dataGridViewWantsInputKey); } }這將阻止
DataGridView傳遞 Enter 鍵並更改目前單元格。但是,它不會使 Enter 鍵添加新行。(似乎DataGridViewTextBoxEditingControl已經刪除了 Enter 鍵的功能)。因此,我們需要自己重寫OnKeyDown和實現該功能,如下所示:protected override void OnKeyDown(KeyEventArgs e) { switch (e.KeyCode & Keys.KeyCode) { case Keys.Enter: int oldSelectionStart = this.SelectionStart; string currentText = this.Text; this.Text = String.Format("{0}{1}{2}", currentText.Substring(0, this.SelectionStart), Environment.NewLine, currentText.Substring(this.SelectionStart + this.SelectionLength)); this.SelectionStart = oldSelectionStart + Environment.NewLine.Length; break; default: break; } base.OnKeyDown(e); }然後,創建一個
CustomDataGridViewTextBoxCell派生自的類DataGridViewTextBoxCell,並重寫該EditType屬性以返回 的類型CustomDataGridViewTextBoxEditingControl。public class CustomDataGridViewTextBoxCell : DataGridViewTextBoxCell { public override Type EditType { get { return typeof(CustomDataGridViewTextBoxEditingControl); } } }完成此操作後,您可以將
CellTemplate現有列上的屬性設置為 aCustomDataGridViewTextBoxCell,或者您可以創建一個派生自預設為 a的類DataGridViewColumn,一切就緒!CellTemplate``CustomDataGridViewTextBoxCell