【发布时间】:2014-01-20 19:05:44
【问题描述】:
我正在修改一些具有自定义日历控件的代码,将DateTimePicker 用于DataGridView。我已经设置了ShowCheckBox = true,并且我试图强制它在用户单击复选框时将日期的值更改为空(通过更改日期的CustomFormat),这有效。我的问题是在复选框上单击太多次才能更改 DateFormat。我的基本 CalendarColumn 来自 http://msdn.microsoft.com/en-us/library/7tas5c80.aspx,但它不包含复选框并且不允许空值。
我的OnValueChanged() 代码是:
protected override void OnValueChanged(EventArgs eventargs)
{
// Notify the DataGridView that the contents of the cell
// have changed.
base.OnValueChanged(eventargs);
if (this.Checked)
{
this.Checked = true;
this.Format = DateTimePickerFormat.Short;
} else if (!this.Checked)
{
this.Format = DateTimePickerFormat.Custom;
this.CustomFormat = " ";
}
}
第一次单击复选框(当它的值被选中时)会使日期变灰,但不会触发 OnValueChanged() 方法,第二次单击将其设置回“选中”并触发事件,第三次单击单击将CustomFormat 设置为“”,因此应显示空日期。
我做了一些研究,我认为我的问题与在第一次点击时获得单元格的焦点有关,但如果我将支票放入 onGotFocus(),单击将显示/隐藏日期格式,但是当我在取消选中复选框后单击另一个单元格时,它仍然将CustomFormat 设置为“”而不是DateTimePickerFormat.Short。
关于类似主题的其他答案请参阅http://www.mofeel.net/70-microsoft-public-dotnet-framework-windowsforms/8806.aspx,但我对如何将其合并到我的代码中感到困惑。我还没有发布整个课程,但是如果有人认为这会有所帮助,我可以这样做吗?
【问题讨论】:
标签: c# winforms datagridview custom-datetimepicker