- PR -

【Windows】C#.NET DateTimePicker のカストマイズ

投稿者投稿内容
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-06-25 18:13
お世話になっております

 DateTimePicker で表示されるカレンダーを
 ShowDialogで個別のカレンダー画面を表示しろという要望があります

 DateTimePickerを継承して、WndProcにて左クリック時に
 カレンダー画面.ShowDialog();
とやってみましたが、フォーカスがあたらず

  カレンダー画面.ShowDialog();
  This.Focus();
とやってみましたが
 カレンダー画面から、コントロールに戻った際に
 年度の所に フォーカスが当たるようになりました

 通常のDateTimePicker での動きと少し変わってきてしまう事と
 そもそも、WndProc にて 対処するのは如何なものかと
 思ったのですが
   (標準のカレンダーで満足して頂けれ良いのですが
    日付未入力の状態を実現したいらしい
    nullableDateTimePicker が欲しいらしい)
 
 WndProc以外で 左クリックでShowDialog
         Null入力を可能にする
     うまい方法はないのでしょうか
     
 ご教授の程、よろしくお願いいたします

追記
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=45150&forum=7
の情報はみました
 時期すでに 遅しで
Valueプロパティの型を Object型に変更ができません 
すみません 勝手にしろ! と言われそうですが
 よろしくお願い致します
 





[ メッセージ編集済み 編集者: 七 編集日時 2008-06-25 18:35 ]
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-06-25 18:30
要望がよくわからなかったのですが、
NullableDateTimePickerではだめな理由があったということですか?
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-06-25 18:40
rainさん レスありがとうございます

 追記が遅れてしまったので 前後して 申し訳ないです

 Focusの動きがおかしいまま
 一旦 リリースされてしまった部品のため
 使用側に 修正依頼ができない状態になってしまってます

 終盤に参入したため 経過状況は 把握していないのですが・・・・


 
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2008-06-25 18:45
質問をよく理解できてないのですが、仮にNullを入力された場合、Valueは何を返すつもりなのでしょうか?
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-06-25 21:14
引用:

burton999さんの書き込み (2008-06-25 18:45) より:
質問をよく理解できてないのですが、仮にNullを入力された場合、Valueは何を返すつもりなのでしょうか?



すみません ソース内容をちゃんと読み取ってなかったです
Value は Object型になってました

 http://japan.internet.com/developer/20050822/25.html
ここにあるソースに似通ったもので作成されています
ただし WndProc にて 左クリック押下時に ShowDialog にて
カレンダーフォームを表示させています



[ メッセージ編集済み 編集者: 七 編集日時 2008-06-25 21:16 ]
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2008-06-25 23:09
現状は標準のDateTimePickerを使用しているのですよね?
ってことはValueはDateTime型です。
それをリンクのNullableDateTimePickerに変更するとValueがObject型になってしまうので採用できないってことだと思いました。
しかし、実現したいことはNullを許可したDateTimePickerなのですよね?
そうすると、Nullが入力された時、DateTime型のValueプロパティは何を返すのか疑問に思って質問しました。
DateTimeは構造体なのでNullは返せませんから。。。
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2008-06-26 11:44
引用:

burton999さんの書き込み (2008-06-25 23:09) より:
しかし、実現したいことはNullを許可したDateTimePickerなのですよね?
そうすると、Nullが入力された時、DateTime型のValueプロパティは何を返すのか疑問に思って質問しました。
DateTimeは構造体なのでNullは返せませんから。。。



ありがとうございます
おっしゃる通りです

「実現したいことはNullを許可したDateTimePickerなのです」
この事により、カレンダーを、Nullを入力するためのボタンが
存在する From を作成し
DateTimePickerを継承した カスタムコントロールの中で
左クリックした時に、そのFormを ShowDialog しています

このShowDialog を WndProc にて行っているため
カレンダー表示後、日付を取得した後の、フォーカスの移動が
左クリック前に、あった、フォーカス位置に移動します
おまけに、一旦、NULLを設定してしまった カスタムコントロールに
対して、再度、日付を設定した後のフォーカス移動時には
そのコントロールにフォーカスが当たっても
その後、ずっと、ブルーにはならなくなります

たぶん、現在の動き(左クリックにてカレンダーフォームを表示する仕様)は
変えられない状況にあるという事らしいです



[ メッセージ編集済み 編集者: 七 編集日時 2008-06-26 11:46 ]
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-06-26 12:13
実はまだ現状や、Nullが入力されたことを親画面へ反映する手段などさっぱりわかっていませんが、WndProc じゃなくて DateTimePicker の Enter イベントで日付入力用のダイアログ? を表示すればよいのではないでしょうか。

# そういえば、どうやって DateTimePicker のドロップダウンを無効にしているんだろう

スキルアップ/キャリアアップ(JOB@IT)