2

を使用してカスタム カレンダー コントロールを持つコードをいくつか変更していDateTimePickerますDataGridView。私は設定ShowCheckBox = trueしており、ユーザーがチェックボックスをクリックしたときに (日付の を変更して) 日付の値を強制的に null に変更しようとしていますがCustomFormat、これは機能します。私の問題は、DateFormat を変更するためにチェックボックスを何度もクリックする必要があることです。私の基本的な Cal​​endarColumn は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を参照していますが、これをコードに組み込む方法について混乱しています。クラス全体を投稿していませんが、誰かがそれが役立つと思うなら投稿できますか?

4

1 に答える 1