簡體   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