防止在 DataGridView 中选择单元格

Posted

技术标签:

【中文标题】防止在 DataGridView 中选择单元格【英文标题】:Prevent selecting cell in DataGridView 【发布时间】:2011-11-04 10:10:21 【问题描述】:

我对 DataGridView 没什么问题。 1. 将 DataGridView 控件拖放到窗体上并将属性 Visible 设置为 False 2. 添加几行并将可见更改为 True,如上面的代码。

private void Form1_Load(object sender, EventArgs e)

   dataGridView1.Rows.Add(new object[]  "1", "a" );
   dataGridView1.Rows.Add(new object[]  "2", "b" );
   dataGridView1.Rows.Add(new object[]  "3", "c" );
   dataGridView1.Rows.Add(new object[]  "4", "d" );

   dataGridView1.Visible = true;
               //^ this trigger selection



private void dataGridView1_SelectionChanged(object sender, EventArgs e)

   Console.WriteLine("selected");

将 Visible 设置为 True 后,自动选择第一个单元格并触发 SelectionChanged 事件。 如何预防?

编辑。解决方案:

分离事件处理程序: 设置可见 清除选择 添加处理程序
dataGridView1.SelectionChanged -= dataGridView1_SelectionChanged;
dataGridView1.Visible = true;
dataGridView1.ClearSelection();
dataGridView1.SelectionChanged += dataGridView1_SelectionChanged;

【问题讨论】:

我认为你的问题是 dataGridView1_SelectionChanged 被解雇是因为这行代码:dataGridView1.Visible = true;。设置网格的可见性将触发事件。为什么一开始要把grid设置为false? 我想在特定情况下显示网格。开头的网格必须隐藏。 【参考方案1】:

您的解决方案将阻止事件触发,但我认为在显示网格时仍会选择第一个单元格。在 DataGridView 上对 ClearSelection() 的简单调用应该可以解决这个问题。

问候,德鲁

【讨论】:

【参考方案2】:

将 DataGridView 的 TabStop 设置为 false

【讨论】:

【参考方案3】:

如果可见性为假,您是否可以不从方法中返回,而不是每次更改可见属性时都进行布线和重新布线。那就是:

private void dataGridView1_SelectionChanged(object sender, EventArgs e)

    if (!dataGridView1.Visible) return;
    Console.WriteLine("selected");
 

【讨论】:

我只希望第一次禁用选择,当 Visible 从 False 变为 True 时。之后用户可以选择单元格,触发器应该可以正常工作。 同意。我想,如果你在 dataGridView1 不可见时“返回”,这正是会发生的情况。

以上是关于防止在 DataGridView 中选择单元格的主要内容,如果未能解决你的问题,请参考以下文章

将 DataGridView 单元格 BackColor 传递给变量以供以后在 c# 中使用

在加载 DataGridView 时防止 SelectionChanged

DataGridView:如何使某些单元格无法选择?

DataGridView控件中如何获取选中单元格内容?

WinForms:DataGridView - 当单元格被编辑时显示组合框

C#/我通过随机选择下一个单元格来填充字符串数组中的 DataGridView,并且不想再次选择使用过的单元格