gpt4 book ai didi

c# - 有没有办法停止 DataGridViewCheckBoxColumn 自动检查点击?

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:45 24 4
gpt4 key购买 nike

我正在使用 DataGridView 并设置了一些 DataGridViewCheckBoxColumns,其中两个将 ThreeState 属性设置为 True。

对于我网格中的某些行,我只希望复选框处于选中状态或不确定状态。 Unchecked 不应该对用户可用。但是,如果用户重复单击该复选框,它就会从选中变为不确定再变为未选中。我只是想让它检查、不确定、检查、不确定等。

有没有办法在单击时停止选中/取消选中复选框(类似于标准 Windows 窗体 Checkbox 控件上的 AutoCheck 属性),或者是否有一个事件可以用来取消 DataGridViewCheckBoxCell 的选中更改?

我曾尝试以编程方式强制选中的单元格从未选中变为选中或不确定,但 UI 从未反射(reflect)这一点。

最佳答案

假设您添加的任何 DataGridViewCheckBoxColumn 都遵循以下模式:

DataGridViewCheckBoxColumn cbc = new DataGridViewCheckBoxColumn();
cbc.ThreeState = true;
this.dataGridView1.Columns.Add(cbc);

然后您需要做的就是将以下事件处理程序添加到您的 DataGridView 以单击和双击 CheckBox:

this.dataGridView1.CellContentClick += ThreeState_CheckBoxClick;
this.dataGridView1.CellContentDoubleClick += ThreeState_CheckBoxClick;

private void ThreeState_CheckBoxClick(object sender, DataGridViewCellEventArgs e)
{
DataGridViewCheckBoxColumn col = this.dataGridView1.Columns[e.ColumnIndex] as DataGridViewCheckBoxColumn;

if (col != null && col.ThreeState)
{
CheckState state = (CheckState)this.dataGridView1[e.ColumnIndex, e.RowIndex].EditedFormattedValue;

if (state == CheckState.Unchecked)
{
this.dataGridView1[e.ColumnIndex, e.RowIndex].Value = CheckState.Checked;
this.dataGridView1.RefreshEdit();
this.dataGridView1.NotifyCurrentCellDirty(true);
}
}
}

本质上,默认的切换顺序是:Checked => Indeterminate => Unchecked => Checked。因此,当点击事件触发 Uncheck 值时,您将其设置为 Checked 并强制网格使用新值刷新。

关于c# - 有没有办法停止 DataGridViewCheckBoxColumn 自动检查点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32778212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com