Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模拟DataGridViewCheckBox的OnClick事件?_C#_.net_Vb.net_Winforms_Datagridviewcomboboxcell - Fatal编程技术网

C# 模拟DataGridViewCheckBox的OnClick事件?

C# 模拟DataGridViewCheckBox的OnClick事件?,c#,.net,vb.net,winforms,datagridviewcomboboxcell,C#,.net,Vb.net,Winforms,Datagridviewcomboboxcell,VB或C#。。。乍一看是一件小事。对于DataGridViewCheckBox,创建OnClick()方法,当且仅当用户更改了复选框的值时(使用空格或鼠标左键单击),才会调用该方法 也许有这样一个事件——CellContentClick——但它似乎受到了与事件顺序相关的错误的影响,并且由于调用EndEdit(),按空格更改值不起作用 Private子DataGridView1\u CellContentClick(发送者作为对象,e作为DataGridViewCellEventArgs)_ 处

VB或C#。。。乍一看是一件小事。对于DataGridViewCheckBox,创建OnClick()方法,当且仅当用户更改了复选框的值时(使用空格或鼠标左键单击),才会调用该方法

也许有这样一个事件——CellContentClick——但它似乎受到了与事件顺序相关的错误的影响,并且由于调用
EndEdit()
,按空格更改值不起作用

Private子DataGridView1\u CellContentClick(发送者作为对象,e作为DataGridViewCellEventArgs)_
处理DataGridView1.CellContentClick
如果是CurrentCellCheckBoxCell(发送方),则
DirectCast(发送方,DataGridView).EndEdit()
当前复选框的打印值()
如果结束
端接头
我们是否能够模拟无缝工作且没有bug的事件?

一致性标准:

(只是一个标准的用户体验——它们应该是显而易见的)

  • 在复选框内单击或按空格键后,应触发更改事件

  • 在chackbox单元格内但在复选框外单击时,不应触发更改事件

  • 仅当值更改时才应触发更改事件(true←→ 错误)

  • 测试复选框值应给出对应于复选框状态的结果

助手代码:

“结果验证”
当前复选框()的子打印值
如果DataGridView1.CurrentCell为Nothing,则返回
Console.WriteLine(DataGridView1.CurrentRow.Cells(DataGridView1.CurrentCell.ColumnIndex).Value.ToString())
端接头
“万能助手”
共享函数IsCurrentCellCheckBoxCell(dataGridViewSender作为对象)作为布尔值
如果dataGridViewSender的类型为DataGridView,则
使用DirectCast(dataGridViewSender、DataGridView)
如果.CurrentCell不是空的,那么
将currentColumn设置为DataGridViewColumn=.Columns(.CurrentCell.ColumnIndex)
currentColumn的返回类型为DataGridViewCheckBoxColumn
如果结束
以
如果结束
返回错误
端函数
(C#或VB–随你喜欢。)

调用
EndEdit()
需要平衡–添加
BeginEdit()
。 我找到了罪犯。使用空格键切换复选框无效,因为
EndEdit()
不够。它需要通过
BeginEdit()
进行平衡

Private子DataGridView1\u CellContentClick(发送者作为对象,e作为DataGridViewCellEventArgs)_
处理DataGridView1.CellContentClick
如果是CurrentCellCheckBoxCell(发送方),则
DirectCast(发送方,DataGridView).EndEdit()
当前复选框的打印值()
DirectCast(发件人,DataGridView).BeginEdit(false)'添加了方法调用
如果结束
端接头

现在,检测复选框的变化和读取其当前状态似乎是可靠的。

这太荒谬了。对于经过几个小时研究的详细问题,我投了反对票,但对于,我得到了“好答案”徽章和迄今为止的+100代表票。