防止在 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