繁体   English   中英

禁用对datagridview的编辑,但仍允许突出显示以复制和粘贴单元格

[英]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用户选择和复制单元格,但不能编辑它,但你的要求是非常略显混乱-如果你是想复制一个单元格,你将需要设置selesctionmodecellselect否则你会被复制一整行

这是我正在使用的东西:

  • 首先,将所有列都设为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM