winforms 如何阻止FullRowSelect同时选择列标题

hfsqlsce  于 2023-02-09  发布在  其他
关注(0)|答案(2)|浏览(109)

我查看了其他关于DataGridView SelectionMode的帖子,但没有发现任何人有同样的问题。
仅在.NET 4.7.2上发生
当我选择一行时,我所单击的列的标题也会被选中,如下所示:

j8ag8udp

j8ag8udp1#

将以下两行代码添加到构造函数中(第一行也可以在设计器中设置):

GridContatos.EnableHeadersVisualStyles = false;
GridContatos.ColumnHeadersDefaultCellStyle.SelectionBackColor = GridContatos.ColumnHeadersDefaultCellStyle.BackColor;
bq8i3lrv

bq8i3lrv2#

所选答案确实100%有效,但我有一些表单,而且随着应用程序的增长还会添加更多表单,因此我创建了自己的自定义DataGridView,这样就不必在每个新表单中添加此行。
1.创建应用程序要使用的自定义DataGridView。
1.在构造函数中,可以处理DataGridView的ColumnStateChanged事件,并将HeaderCell的Style重置为默认背景值:
例如(我实际上已经有一个自定义网格的其他原因,如搜索过滤):

public class DataGridViewCustom : DataGridView
  {
    public DataGridViewSearch() : base()
    {
      InitializeComponent();
  
      this.ColumnStateChanged += DataGridViewCustom_ColumnStateChanged;
    }
  
    private void DataGridViewCustom_ColumnStateChanged(object sender, DataGridViewColumnStateChangedEventArgs e)
    {
      DataGridView dataGridView = (DataGridView)sender;
      //Only update for full row selection mode.
      if (dataGridView.SelectionMode == DataGridViewSelectionMode.FullRowSelect)
      {
        e.Column.HeaderCell.Style.SelectionBackColor = dataGridView.ColumnHeadersDefaultCellStyle.BackColor;
      }
    }
  }

相关问题