C#DataGridView(CheckBox)单元格单击多个回调
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#DataGridView(CheckBox)单元格单击多个回调,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2555字,纯文字阅读大概需要4分钟。
内容图文
![C#DataGridView(CheckBox)单元格单击多个回调](/upload/InfoBanner/zyjiaocheng/657/d4e1ddf4a6314b9dae1dd4aba055272a.jpg)
[C#,Visual Studio 2008,Windows 7 64]
我的课上有一个DataGridView.此数据网格视图使用DataGridViewCheckBoxColumn,以便每个单元格都包含一个复选框.
这是其中一行的屏幕截图:
我希望能够检测用户是否选择了该单元格(该单元格中的某个位置,但未位于复选框的顶部).我还想检测用户是否选中了该复选框.为了做到这一点,我的代码必须为两个事件设置回调:
this.CellClick += cellClick; // callback when the user selects a cell
this.CellContentClick += cellContentClick; // callback when the user selects a checkbox
这是回调方法:
private void cellContentClick(object sender, DataGridViewCellEventArgs e)
{
toggleCellCheck(e.RowIndex, e.ColumnIndex);
}
private void cellClick(object sender, DataGridViewCellEventArgs e)
{
toggleCellCheck(e.RowIndex, e.ColumnIndex);
}
private void toggleCellCheck(int row, int column)
{
bool isChecked = (bool)this[column, row].EditedFormattedValue;
this.Rows[row].Cells[column].Value = !isChecked;
}
(注意:如您所见,toggleCellCheck方法获取复选框值并将其切换为选中->未选中或未选中->已选中.)
当用户单击非复选框单元格中的任何位置时,仅触发一个回调,即cellClick.随后调用toggleCellCheck方法,复选框状态翻转.
这是我想要的确切行为.
我遇到的问题是,当用户直接单击复选框时,两个事件将按以下顺序触发:cellClick然后cellContentClick.
这两个回调都将导致复选框选中状态在第一个回调之后切换,然后在第二个回调之后再次切换.最终的结果当然是复选框选中的状态不会更改.
有什么方法可以配置DataGridView类来阻止触发两个回调?或者,是否有一种方法可以(在cellContentClick方法内部)检测到这是第二个回调,或者该回调是通过单击复选框生成的,然后直接退出而无需调用toggleCellCheck?
我在想以下内容:
private void cellContentClick(object sender, DataGridViewCellEventArgs e)
{
// if sender/sender child/etc. is of type checkbox then return because
// _cellClick_ has already been called to change the checkbox checked property
// something like the following:
//
// if (typeof(sender) == CheckBox) return;
// else toggleCellCheck(e.RowIndex, e.ColumnIndex);
}
谢谢!
一月
解决方法:
您不需要单元格内容单击处理程序-选中复选框时将调用单元格单击.
看来您的最终目标是使网格响应所单击的单元格内容以及所单击的实际复选框.
为此,只需使用以下内容附加到单元格单击事件:
void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Columns[e.ColumnIndex].Name == "checkboxcolumn")
{
Console.WriteLine("Click");
bool isChecked = (bool)dataGridView1[e.ColumnIndex, e.RowIndex].EditedFormattedValue;
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = !isChecked;
dataGridView1.EndEdit();
}
}
1.我建议不要进行这种ui修改-像DataGridView这样的控件的默认行为已广泛传播并经过了良好的测试.更改它们通常不是一个好主意.
内容总结
以上是互联网集市为您收集整理的C#DataGridView(CheckBox)单元格单击多个回调全部内容,希望文章能够帮你解决C#DataGridView(CheckBox)单元格单击多个回调所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。