[英]Disable edits on datagridview but still allow for highlighting to copy and paste cells
是否有一个属性(或变通办法)可以但不允许在datagridview中进行编辑,但允许在单元格中突出显示文本?
当前,用户能够突出显示/复制和编辑单元格中的文本(但未进行任何更改)。 他们尝试编辑单元格中的文本,然后在不保存更改时感到困惑。 我想要它,因此单元格不会显示为可编辑的。
我尝试将readonly属性设置为true,但是禁用了单元格上文本的突出显示。 我希望他们能够从单元中复制。 是否有像readonly = true这样的属性仍可以突出显示单元格?
编辑-为了澄清:
文本框具有我要查找的效果:我有一个文本框字段,其初始文本为readonly = true。 我可以使用鼠标突出显示该文本框中的部分文本(然后将其复制)。 文本框的内容不可编辑。 这是我想要的效果,但是我想使用fullrowselectmode中的datagridview做到这一点。
当前我有:selectionMode = fullRowSelect(我希望能够选择整行,而不是按单元格)
readOnly = False
EditMode = EditOnKeystrokeOrF2
这些设置允许用户“双击”单元格,然后突出显示任何单元格中的文本。 这是我想要的效果,但是这些设置的唯一问题是用户还可以在该单元格中键入更多/删除文本。
谢谢!
您应该将DataGridView的readonly属性设置为true,这样在用户可以复制单元格时将无法编辑该属性。
您可以使用:
DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically
这alows用户选择和复制单元格,但不能编辑它,但你的要求是非常略显混乱-如果你是想复制一个单元格,你将需要设置selesctionmode
到cellselect
否则你会被复制一整行
这是我正在使用的东西:
首先,将所有列都设为ReadOnly
= false,因为您将不得不覆盖其默认行为。
关于只读的列的Tag
属性中,将true或false设置为false。
将网格编辑设置设置为EditOnEnter
然后,使用EditingControlShowing
事件更改每次用户单击单元格时弹出的文本框属性。 无论文本框是只读还是不可读,用户都可以选择和复制内容。
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) {
if(!(e.Control is TextBox))
return;
var txt = e.Control as TextBox;
if(true.Equal(grid.CurrentCell.OwningColumn.Tag)) {
txt.ReadOnly = true;
}
else {
txt.ReadOnly = false;
}
}
Tag
并不是最干净的东西,但是还有许多其他方式可以存储一些自定义列属性。
您可以将选择模式设置为RowHeaderSelect
。 它允许您按单元格或按行复制。
这样解决
Private Sub dgv_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgv.CellValidating
If dgv.IsCurrentCellDirty Then
e.Cancel = True
SendKeys.Send("{ESC}")
End If
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.