私が本格的なプログラミングを最後に行ったのは、25 年前に C で Kernighan と Ritchie のコピーを使用したときでした。年老いた素人に優しくしてください!
本質的には、古い null 許容の日付ピッカーです。1つの例外を除いて、完全にうまく機能するソリューションがあります。マスクされた TextBox と MonthCalendar の組み合わせを使用しています。マスクされた TextBox は、データ セットから任意の値 (null を含む) を表示し、カレンダーからの値を受け入れるだけです。カレンダーでバックスペースを押すと、マスクされた TextBox がクリアされます。すべてこれは非常に簡単です。ここで行う必要があるのは、フォーカスが失われたときにカレンダーを非表示にすることだけです。簡単な例は、私が抱えている問題を示しています。
最初のフォーカスを取得するテキスト ボックス、マスクされたテキスト ボックス、非表示の MonthCalendar を含むフォームを作成します。マスクされたテキスト ボックスの Enter イベントには、次のコードがあります。
monthCalendar1.Visible = true;
monthCalendar1.Focus();
私の意図は、次のコードを MonthCalendar の Leave イベントに入れることでした。
monthCalendar1.Visible = false;
何らかの理由で、カレンダーがフォーカスを取得するとすぐにこのコードがトリガーされ、すぐにカレンダーが再び非表示になります。デバッグにより、このコードがトリガーされることが確認されます。Leave イベントが空の場合、MonthCalendar は実際にフォーカスを取得して保持します。これは、矢印キーでカレンダーをナビゲートできるためです。
誰かがこの振る舞いを古い霧に説明できますか、それとも、私がやろうとしていることへのポインタを教えてください。
よろしくお願いします。