を使用してカスタム カレンダー コントロールを持つコードをいくつか変更していDateTimePicker
ますDataGridView
。私は設定ShowCheckBox = true
しており、ユーザーがチェックボックスをクリックしたときに (日付の を変更して) 日付の値を強制的に null に変更しようとしていますがCustomFormat
、これは機能します。私の問題は、DateFormat を変更するためにチェックボックスを何度もクリックする必要があることです。私の基本的な CalendarColumn はhttp://msdn.microsoft.com/en-us/library/7tas5c80.aspxから来ていますが、チェックボックスが含まれておらず、null 値を許可していませんでした。
私の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 = " ";
}
}
チェックボックスを最初にクリックすると(値がチェックされている場合)、日付がグレー表示されますが、メソッドは起動されません.2回目のクリックで「OnValueChanged()
チェック済み」に戻り、イベントが発生し、3回目のクリックでCustomFormat
したがって、null の日付が表示されます。
私はいくつかの調査を行いましたが、私の問題は最初のクリックでセルのフォーカスを取得することに関係していると思いますが、にチェックを入れるonGotFocus()
と、シングルクリックで日付形式が表示/非表示になります、しかし、チェックボックスをオフにした後に別のセルをクリックすると、CustomFormat
セットは ではなく " "のままになりますDateTimePickerFormat.Short
。
同様のテーマに関する他の回答はhttp://www.mofeel.net/70-microsoft-public-dotnet-framework-windowsforms/8806.aspxを参照していますが、これをコードに組み込む方法について混乱しています。クラス全体を投稿していませんが、誰かがそれが役立つと思うなら投稿できますか?