Я изменяю код, который имеет настраиваемый элемент управления календаря, используя DateTimePicker
для DataGridView
. Я установил ShowCheckBox = true
, и я пытаюсь заставить его изменить значение даты на null, когда пользователь нажимает на этот флажок (путем изменения CustomFormat
of Date), который работает. Моя проблема в том, что для изменения параметра DateFormat требуется слишком много кликов. Моя основная CalendarColumn происходит от http://msdn.microsoft.com/en-us/library/7tas5c80.aspx, но это не включает флажок и не допускает нулевые значения.DateTimePicker требуется несколько щелчков флажка, чтобы запустить OnValueChanged
Мой 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()
, второй щелчок устанавливает его обратно " checked "и запускает событие, а третий щелчок устанавливает CustomFormat
на" "и, следовательно, отображает нулевую дату, как следует.
Я провел некоторое исследование, и я думаю, что моя проблема связана с приобретением фокуса ячейки при первом щелчке, но если я поместил свой чек в onGotFocus()
, один клик покажет/скроет формат даты, как следует, но затем, когда я нажимаю на другую ячейку после снятия флажка, он остается с CustomFormat
, установленным как «", а не DateTimePickerFormat.Short
.
Другие ответы по аналогичной теме относятся к http://www.mofeel.net/70-microsoft-public-dotnet-framework-windowsforms/8806.aspx, но я смущен относительно того, как я включил бы это в свой код. Я не опубликовал весь класс, но могу, если кто-нибудь подумает, что это поможет?