我有一个Windows Forms应用程序,该应用程序在DataGridView中显示对象列表。

此控件将bool值呈现为复选框。

对象属性中有一组三个相互排斥的复选框。至多其中之一是正确的。因此,我希望复选框可以像一组单选按钮一样起作用。


  只是老人的一句话:我想这些天人们甚至都不知道为什么将它们称为单选按钮。在过去,汽车中的收音机有4或5个按钮,按下其中任何一个都会弹出其他所有按钮。它们是互斥的。这些天,“单选按钮”可能不是一个有用的描述,因为我认为收音机不再具有类似的按钮。


我该怎么做?我认为如果将“ CheckedChanged”事件附加到复选框,并且知道该行,则可以找到所有其他复选框。

首次呈现复选框控件时,我可以钩住哪个事件,以便可以将CheckedChanged事件附加到该事件?我知道DataGridView.CellFormatting,但是我认为这是错误的,因为每次DataGridView绘制时都会调用它。我真的需要一个仅在首次呈现DGV时调用的事件。

最佳答案

您想要的一个是DGV本身的CellContentClick。附加一个处理程序,以检查DGV的该列是否为CheckBoxCell,如果是,则取消选中该行上的所有其他复选框。

不过请注意,对于CheckBoxCell,此事件在复选框值实际更改之前触发。这意味着无论您对当前单元格做什么,它都会被稍后触发的事件所覆盖。可以摆脱这种情况的行为是,您不能选中一行中的任何单元格,方法是选中该行上的一个框,然后再次选中它(无论您是否尝试在处理程序中设置复选框值,复选框将在第二次单击后最终清除)。要解决此问题并强制选中其中一个复选框,您可以改为处理CellValueChanged,并且如果更改的单元格是当前单元格并且未被选中,请选中它。

10-08 09:19
查看更多