C# datagridview 实现单元格内容进行回车换行而不是换另一行数据_c#dgv编辑后不回车到下一行-优快云博客
表格属性:
dataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
按键监测:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter)
{
System.Windows.Forms.TextBox txt;
int txtSelectionStart;//光标位置
string txtText;
string textSelectionStartLeft = "";//光标位置前文本
string textSelectionStartRight = "";//光标位置后文本
if (!dataGridView.IsCurrentCellInEditMode)//表格是否正在编辑中
{
return base.ProcessCmdKey(ref msg, keyData);
}
if (dataGridView.EditingControl.GetType() = typeof(DataGridViewTextBoxEditingControl))//获取表格编辑中单元格类型并判断是否为文本框
{
return base.ProcessCmdKey(ref msg, keyData);
}
txt = (System.Windows.Forms.TextBox)dataGridView.EditingControl;
txtSelectionStart = txt.SelectionStart;
txtText = txt.Text;
if (txtSelectionStart > 0)
{
textSelectionStartLeft = txtText.Substring(0, txtSelectionStart);//获取换行前光标左侧文字
}
if (txtSelectionStart < txtText.Length)
{
textSelectionStartRight = txtText.Substring(txtSelectionStart, txtText.Length - txtSelectionStart);//获取换行前光标右侧文字
}
txtText = textSelectionStartLeft + "\r\n" + textSelectionStartRight;//拼接
txt.Text = txtText;
dataGridView.CurrentCell.Value = txtText;//有这调语句才会让回车时单元格高度增加
txt.Select(txtSelectionStart + 2, 0);//因为加了\r\n所以+2
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}