DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DateTimePickerのドロップダウンで表示される日付部分について

環境/言語:[VB.NET 2003 Windows XP Pro]
分類:[.NET]

何時もこちらのHPにはお世話になっております。

今回お聞きしたいのはDateTimePickerで表示されるカレンダーについてです。

DateTimePicker以外のコントロールでエラーが発生していた場合は
ドロップダウンで表示されるカレンダーについて表示しないように
したいのですが、DropDownイベントが発生した際にエラーチェックを行い
CloseUpを呼んでみたのですがうまくいきません。

上記でうまくいかなかったので、
Protected Overrides Sub WndProc(ByRef m As Message)で
DateTimePickerのコントロールであるならメッセージ自体を
なかった事にしようともしたのですが、うまくいきませんでした。

なんとかドロップダウンで表示されるカレンダーを表示しないように
する方法はないでしょうか?

また、コントロールのEnable設定などは行わない方針でお願いします。

どなたかご存知でしたらよろしくお願いします。
■No16655に返信(じゅでさんの記事)
初めましてKEIです。
おはようございます。

> DateTimePicker以外のコントロールでエラーが発生していた場合は
> ドロップダウンで表示されるカレンダーについて表示しないように
> したいのですが、DropDownイベントが発生した際にエラーチェックを行い
> CloseUpを呼んでみたのですがうまくいきません。

ですが、既に表示されているDatatimepickerのドロップダウンされている
カレンダーを表示しないという事でしょうか?
もしくは、ボタンを押してカレンダーを表示できないようにしたいと
いう事でしょうか?
後者でしたら、いいのか悪いのか何とも申し上げられませんが、
DataTimePickerのボタン部分にラベルを貼り付けておいて、
カレンダーを表示させたくない場合にラベルで隠す方法は如何でしょうか…?
じゅでです。
何時もお世話になっております。

返答が遅れまして申し訳ございません。

> もしくは、ボタンを押してカレンダーを表示できないようにしたいと
> いう事でしょうか?
> 後者でしたら、いいのか悪いのか何とも申し上げられませんが、
> DataTimePickerのボタン部分にラベルを貼り付けておいて、
> カレンダーを表示させたくない場合にラベルで隠す方法は如何でしょうか…?

上記のような方法はできれば取りたくないのです。
画面上のコントロールは増やさずに行いたいのです。

OnCloseUpイベントがあるのですがプロテクト メソッドとなっていますし、
これが呼べればカレンダーのクローズイベントが走らせられるのですが。
しかし、Protected Overrides Sub WndProc(ByRef m As Message)でうまく
いくと思ったのですが、Spy++でメッセージのやり取りを少しみてみます。
どうにも自分のやり方がうまくないかもしれませんので。
まだまだ未解決ですので、ご存知の方がいらっしゃいましたらよろしくお願いいたします。

また、回答を下さったKEI様。
ありがとうございました。

以上
■No16707に返信(じゅでさんの記事)

> 上記のような方法はできれば取りたくないのです。
> 画面上のコントロールは増やさずに行いたいのです。
やはりそうでしたか…汗
自作コントロールを作成して使用する方法も出来ないのでしょうか?
単純に DateTimePicker1.ShowUpDown を = True に設定して
カレンダーを出さない方法とか…??
簡単な方法しか思いつかなくてすみません…^^;
じゅでです。
何時もお世話になっております。

KEI様 ご返答ありがとうございます。

> 自作コントロールを作成して使用する方法も出来ないのでしょうか?

画面コントロールについては、こちらで準備している物ではないので触れないのです。
コードでガリガリと何とかするしかない状態です。

> 単純に DateTimePicker1.ShowUpDown を = True に設定して
> カレンダーを出さない方法とか…??

言葉が足りませんでした、カレンダーを出さないではなく、
日付変更を行えないようにしたいのです。
ボタンを押しても日付自体に変更がかからないようにしたいのです。

> 簡単な方法しか思いつかなくてすみません…^^;

こちらとしては、結構に詰まってしまっているので、回答がいただけるだけでも
助かります。
お忙しい中ありがとうございます。

まだまだ回答を募集中です。
ご存知の方がいらっしゃいましたらよろしくお願いいたします。

以上
■No16712に返信(じゅでさんの記事)
> 言葉が足りませんでした、カレンダーを出さないではなく、
> 日付変更を行えないようにしたいのです。
> ボタンを押しても日付自体に変更がかからないようにしたいのです。

上記の内容なら _ValueChanged や _TextChanged などで
変更された値を元に戻す方法などは如何ですか?
選択も入力もさせたくないのであれば、_Click _KeyPress _KeyDown なんかの
イベントを無効化すればよいかと。
じゅでです。

いつもお世話になっております。

KEI様ご返答ありがとうございます。

> 上記の内容なら _ValueChanged や _TextChanged などで
> 変更された値を元に戻す方法などは如何ですか?

上記についてはChangedイベント事態を走る前に無効としたいので、こちらの方法はとれません。

> 選択も入力もさせたくないのであれば、_Click _KeyPress _KeyDown なんかの
> イベントを無効化すればよいかと。
>

上記についてはどのような事を言っているのかがよくわかりません。
KeyPressやKeyDownのイベントについてはe.Handled = Trueで
キーボード処理を終了した事とする事はできますが、Clickについても
同様にキャンセルが聞くのでしょうか?
または、Clickに何らかの処理が有る場合にRemoveHandlerをするということでしょうか?
お手数ですが、Closeイベントのようにキャンセルが利くのであればご教授願います。

お忙しい中ご返答ありがとうございます。

まだまだ回答を募集中です。
ご存知の方がいらっしゃいましたらよろしくお願いいたします。

以上
>また、コントロールのEnable設定などは行わない方針でお願いします。
ボクだったら方針が間違ってるという結論を下しますが。
じゅでです。

何時もお世話になっております。

るしぇ様ご返答ありがとうございます。

> >また、コントロールのEnable設定などは行わない方針でお願いします。
> ボクだったら方針が間違ってるという結論を下しますが。

検索条件などの画面ヘッダー情報を入力後に検索して何かをする場合などは
画面のヘッダー情報変更が行われると困るのでEnableなどで固めますが、
ただの検索入力項目なのでEnableは行いません。
またエラーチェックを行うのがLeaveイベントEnterイベントなので、Evable
には設定ができません。
Changedイベント系については、DBにアクセスをしてエラーチェックを行うような
部分では使用できない為(イベントが走るたびにDBにアクセスなどは行わない)
表示ボタンや検索ボタンでチェックロジックを固めるのは今回は行えません。
(1項目毎にチェックを行う)

また、上記のように方針が間違ってるといえれば、この手の仕事はもっと楽になる事ですが、それがいえないのが実情です。
2006/07/19(Wed) 17:06:54 編集(投稿者)

■No16721に返信(じゅでさんの記事)
>ただの検索入力項目なのでEnableは行いません。
そうなると今度は何故変更されてはいけないのか?
ただの検索入力項目なら他にエラーがあっても変更
されていいじゃん?
ってな話になって、どうにも不思議な仕様に思えます。

細かい仕様に口出す気はありませんが、ユーザから
の入力が困る時点で Enabled を変更してユーザとの
対話を拒否する。Enabled を変更しない(コントロールが有効)
の場合は入力値を変更されてもいい…それだけのことに思います。
…でないと、見た目に有効なのに内部の処理だけ変に
弾かれる訳ですから『何故か入力できなくなりました』とかいう
苦情がユーザから来たりしませんか?


ま、それは置いておいて。。。

>またエラーチェックを行うのがLeaveイベントEnterイベントなので、Evable
>には設定ができません。
関係無いと思うんですが。。。(^^;)
>DateTimePicker以外のコントロールでエラーが発生していた場合は
>ドロップダウンで表示されるカレンダーについて表示しないように
エラーチェックをするのは他のコントロールなのですよね?エラーが
あると分かった時点で DateTimePicker の Enabled を変更するのに
どういった問題があるのか把握できませんでした。

>Changedイベント系については、DBにアクセスをしてエラーチェックを行うような
>部分では使用できない為(イベントが走るたびにDBにアクセスなどは行わない)
これも関係無いと思います。他のコントロールでのエラーチェックの方法は
問題にしておりません。エラーチェックを行った時に、チェックに引っ掛かった
時のみ変更するのでいいのでは?
じゅでです。

いつもお世話になっております。

るしぇ様ご返答ありがとうございます。

> ま、それは置いておいて。。。

ここはおいておいていただけると助かります。
こちらが設計したわけではないので。

> >またエラーチェックを行うのがLeaveイベントEnterイベントなので、Evable
> >には設定ができません。
> 関係無いと思うんですが。。。(^^;)
> >DateTimePicker以外のコントロールでエラーが発生していた場合は
> >ドロップダウンで表示されるカレンダーについて表示しないように
> エラーチェックをするのは他のコントロールなのですよね?エラーが
> あると分かった時点で DateTimePicker の Enable を変更するのに
> どういった問題があるのか把握できませんでした。

エラーがあるとわかる時点が問題なのです。
下記にも書きますが、Leaveイベントでのエラーチェックとなります。
画面にコントロールが二つしかない場合にEnableを復帰するのは
どのタイミングになりますか?
Leaveイベントは2個目のコントロールがEnableに設定されているので
フォーカスが移らない為発生しないはずです。

ここで下記にあるChangedイベントがきます。
これであれば可能ですが、下記に書いてある通りエラーチェックの内容によっては
DBアクセスが発生する為行いません。

>
> >Changedイベント系については、DBにアクセスをしてエラーチェックを行うような
> >部分では使用できない為(イベントが走るたびにDBにアクセスなどは行わない)
> これも関係無いと思います。他のコントロールでのエラーチェックの方法は
> 問題にしておりません。エラーチェックを行った時に、チェックに引っ掛かった
> 時のみ変更するのでいいのでは?

上記にもかいてありますが、下記のような事が問題になります。
エラーが起こった場合にフォーカスが遷移できないようにしたとしてEnableに
設定したとします。
その後Leaveイベントが走るとしてEnableを解除します。
画面上でEnalbeに設定したコントロールの復帰をしたとして、
そのコントロールが別のコントロールを押すまで触れないのは困るのです。
よってどうしてもEnterイベントが起こるようにしなければならないのです。

1のコントロールのLeaveでエラーが発生した場合に2のコントロールがEnable=Flaseに設定したとして、
1のコントロールに正常値を入れなおした時点でEnable=Trueにしなければならないのです。
しかしながら書いてある通りChangedイベント系は使えません。
あくまでもエラーチェックはLeaveイベントで行います。

上記のよるになります。

お忙しい中ご返答ありがとうございます。

まだまだ、回答を募集中です。
方法をご存知の方が居ましたらよろしくお願いします。

以上
■No16721に返信(じゅでさんの記事)
> 上記についてはChangedイベント事態を走る前に無効としたいので、こちらの方法はとれません。
ですが、カレンダーなどで変更された値を
変更される前の値に交換するという事なのですが…。

> KeyPressやKeyDownのイベントについてはe.Handled = Trueで
> キーボード処理を終了した事とする事はできますが、Clickについても
> 同様にキャンセルが聞くのでしょうか?
> または、Clickに何らかの処理が有る場合にRemoveHandlerをするということでしょうか?
は、マウスでのClickです。誤解があったようで申し訳ないです…汗

現時点で仕様がイマイチわからなくなってきたのですが…
DataTimePicker自体の見た目の問題なのでしょうか?
Enabled = False にすると、表示の色が変更されるからといった理由ぐらいしか
思いつきません…^^;
じゅでです。

何時もお世話になっております

KEI様ご返答ありがとうございました。

>>上記についてはChangedイベント事態を走る前に無効としたいので、こちらの方法はとれません。
> ですが、カレンダーなどで変更された値を
> 変更される前の値に交換するという事なのですが…。

カレンダーですでに値が変更できる事がすでに駄目なのです。
変更が行えないという状態でなければならないのです。
ただし、Enableは指定できないのです。

>>KeyPressやKeyDownのイベントについてはe.Handled = Trueで
>>キーボード処理を終了した事とする事はできますが、Clickについても
>>同様にキャンセルが聞くのでしょうか?
>>または、Clickに何らかの処理が有る場合にRemoveHandlerをするということでしょうか?
> は、マウスでのClickです。誤解があったようで申し訳ないです…汗
>
> 現時点で仕様がイマイチわからなくなってきたのですが…
> DataTimePicker自体の見た目の問題なのでしょうか?
> Enabled = False にすると、表示の色が変更されるからといった理由ぐらいしか
> 思いつきません…^^;
>

Enabledに指定すると、エラーが起こってEnableに設定しました。
その後正常値を入れた場合にEnableに指定したものをダイレクトに触れなければ
なりません。
しかしながら、コントロールが二つしかない場合にLeaveイベントでEnableの設定をしていた場合にダイレクトに触れないのです。
別のコントロールに遷移後であれば触る事は可能なのですが。

まだまだ回答を募集中です。
ご存知の方がいらっしゃいましたらよろしくお願いいたします。

以上
>> 自作コントロールを作成して使用する方法も出来ないのでしょうか?
>
>画面コントロールについては、こちらで準備している物ではないので触れないのです。
>コードでガリガリと何とかするしかない状態です。
という書き込みがありましたが、WndProc のオーバーライドは(うまくいかなかったものの)
使っちゃダメとは書かれてません。継承を使ってるとすればコントロールを置き換えている
のでは?と思うのですが、それだと自作コントロールの作成と同じように思います。
結局、コントロールを置き換えるのはどうなんですか?
じゅでです。

何時もお世話になっております。

るしぇ様ご返信ありがとうございます。

> という書き込みがありましたが、WndProc のオーバーライドは(うまくいかなかったものの)
> 使っちゃダメとは書かれてません。継承を使ってるとすればコントロールを置き換えている
> のでは?と思うのですが、それだと自作コントロールの作成と同じように思います。
> 結局、コントロールを置き換えるのはどうなんですか?

コントロールを置き換える事は今現在のままでは行えません。
理由としては、見た目はともかくとして、開発を行っているのがうちのみでは
無い為です。(同一のコントロールを使用する必要がある)
よって、コントロールは既存の物を使用し継承などは行えません。

また、WndProc のオーバーライドは、特にコントロールを変更している
わけでもなく、引き渡されている画面フォームで行っているので
セーフという形です。(引き渡された画面についてコントロールを入れ替えたり
していない、また、実現しようとしてもさほど手間がかかるわけでも無い為)

#蛇足ですが
#たぶん予測でまだ試しても居ませんが、DateTimePickerを継承して
#独自コントロールを作成してOnDropDownイベントをオーバーライドして
#エラーチェック結果格納用の変数を別途容易しとき
#エラーチェック内容の設定用プロパティを作成しておけば
#事はすむと思います。
#まだまだ勉強不足で違う部分もあると思いますが、
#たぶんこんな感じになると思います。
#違っていたら指摘していただけると勉強になりますので助かります。

るしぇ様、KEI様ご返答ありがとうございました。
長々と毎回回答を頂けて助かっております。
ありがとうございます。

まだまだ回答を募集中です。
ご存知の方がいらっしゃいましたらよろしくお願いいたします。

以上
じゅでです。

何時もお世話になっております。

> #蛇足ですが
> #たぶん予測でまだ試しても居ませんが、DateTimePickerを継承して
> #独自コントロールを作成してOnDropDownイベントをオーバーライドして
> #エラーチェック結果格納用の変数を別途容易しとき
> #エラーチェック内容の設定用プロパティを作成しておけば
> #事はすむと思います。
> #まだまだ勉強不足で違う部分もあると思いますが、
> #たぶんこんな感じになると思います。
> #違っていたら指摘していただけると勉強になりますので助かります。

OnDropDownをオーバーライドしてエラー無しの場合のみスーパークラスの
OnDropDownイベントを実行するようにしてみましたが、これでも表示されます。
その他全部のイベントを並べてみては見たのですが、どうにも表示されるようで。
(途中で関係なさげな部分はコメントアウトしたのが良くなかったのかもしれませんが・・・)
私の悪い頭ではそろそろ限界になりつつあります。

どうか知恵をお貸し下さい。
よろしくお願いいたします。

#ところで、調べていたのですが、だんだん無理がありそうだと
#かなり感じてきました。
#CreateWindowEXで作成するDATETIMEPICK_CLASSについてこちらから
#どうこうできないような気がしてきました・・・
#それとも、やはり私の頭が悪いのでしょうか。
#どうしてもやりたいなら、Windowのスタイルをこのコントロールに対して
#APIで書き換えてやればいいんですかね?
■No16737に返信(じゅでさんの記事)
> #ところで、調べていたのですが、だんだん無理がありそうだと
> #かなり感じてきました。
> #CreateWindowEXで作成するDATETIMEPICK_CLASSについてこちらから
> #どうこうできないような気がしてきました・・・
> #それとも、やはり私の頭が悪いのでしょうか。
> #どうしてもやりたいなら、Windowのスタイルをこのコントロールに対して
> #APIで書き換えてやればいいんですかね?

確かに仕様にかなり無理があるような気は致しますが、
決して じゅでさんの頭が悪い訳ではないですよ(^^)

自分がどうこう出来るレベルを超えてますが…マウスのイベントフックをする
方法もありかも知れません。
一応ご参考になればと思います。
http://hongliang.seesaa.net/article/7651626.html
■No16737に返信(じゅでさんの記事)
こんばんは エツです。 初めまして。

>
>>#蛇足ですが
>>#たぶん予測でまだ試しても居ませんが、DateTimePickerを継承して
>>#独自コントロールを作成してOnDropDownイベントをオーバーライドして
>>#エラーチェック結果格納用の変数を別途容易しとき
>>#エラーチェック内容の設定用プロパティを作成しておけば
>>#事はすむと思います。
>>#まだまだ勉強不足で違う部分もあると思いますが、
>>#たぶんこんな感じになると思います。
>>#違っていたら指摘していただけると勉強になりますので助かります。
>
> OnDropDownをオーバーライドしてエラー無しの場合のみスーパークラスの
> OnDropDownイベントを実行するようにしてみましたが、これでも表示されます。
> その他全部のイベントを並べてみては見たのですが、どうにも表示されるようで。
> (途中で関係なさげな部分はコメントアウトしたのが良くなかったのかもしれませんが・・・)
> 私の悪い頭ではそろそろ限界になりつつあります。
>

この案はDateTimePickerを独自クラスに置き換えることと思いますが、それでよいのですか?(始めはダメと仰っていましたので...)
それで良いのなら、DateTimePicker独自クラスのWndProc をオーバーライドし、表示したくない場合はbaseのWndProcを呼ばなければいいので簡単です。しかし再描画の問題もありますので注意が必要です。

一番簡単なのは最初KEIさんが回答してたように、ラベルでDateTimePickerの▼部分を隠すことです。ラベルまたはpanelで▼部に同じ大きさ、同じ色、同じ図形を描けば殆ど気づかれなくできると思います。デザインでフォームに配置するのが嫌ならコードで配置し、必要な時にラベルを表示、非表示するだけです。色、図形を描くことを考えるとラベルや、panelよりは、pictureBoxがいいかもしれません。

御参考までに。
■No16755に返信(エツさんの記事)
>一番簡単なのは最初KEIさんが回答してたように、ラベルでDateTimePickerの▼部分を隠すことです。
コントロールを変更しないならそうでしょうね。

ただ、DateTimePicker を選択しておいて、Alt + ↓キーでカレンダーが表示されたり
しませんか?この質問の難しいところは、ショートカットキーのような、ある意味特殊な
操作も調べ上げて、全てに対応しないといけないということです。(でないと以後の
処理に、日付が変更されていないことが前提となった処理が追加された時にバグが
発生するわけです)
まぁ、ちゃんと調べれば数的には困難な対応ではないと思います。(手段的には
制限が付き過ぎて困難になっている事は明白ですが。)
最終的には掲示板で結論を出すのではなく、正規のサポートで DateTimePicker
の仕様を確認することも必要だと思います。
# ですから Enabled にこだわったわけです。
# 嫌がるでしょうが、画面にコントロールが二つしかない場合は、画面外に
# 使用しないコントロールを追加してでも Enabled を操作するのが、バグが
# 発生する可能性は一番低いと思います。

Enabled を操作しない方向で考えるとして、
手段ですよね。既にエツさんが書かれてますが、
DateTimePicker で WndProc をオーバーライドを許すのかどうかが重要ですね。
許すのであれば、
マウスのクリックを弾いてカレンダーを表示させないことはできます。
後はキーボード関係をずらずら書くことになるでしょうか。。。

>自分がどうこう出来るレベルを超えてますが…マウスのイベントフックをする
>方法もありかも知れません。
どこでフックするか?ですよね。DateTimePicker でフックするなら WndProc
をオーバーライドするのと変わらないと認識していますが。。。

>>上記についてはChangedイベント事態を走る前に無効としたいので、こちらの方法はとれません。
これも理由次第です。他に方法が無いならもっと検討すべきです。
■No16759に返信(るしぇさんの記事)

確かに様々な場合を想定する必要がありますね。

じゅでさんへ

トラブルの発生しない仕様が一番大事ですので、じゅでさんには良く検討していただくとして、次の事は役に立ちますでしょうか?
1.DateTimePicker1.ShowUpDown を = True にするとカレンダーは表示しない。(KEIさんの指摘)
2.DateTimePicker1.Enterイベントでラベルなどの別のコントロールにフォーカス設定すると、DateTimePicker1の変更はできない。(当たり前ですが)

これを踏まえ次のように考えます。
1つ目のコントロールのLeaveイベントでセットしたエラーフラグをDateTimePicker1.Enterイベントで使用しエラーの場合、すぐに1つ目のコントロールにフォーカスをセットしDateTimePicker1.Enterイベントを抜けます。これでDateTimePicker1は設定変更はできません。
(DateTimePicker1のLeaveイベントは使用してないとします。)

次に1つ目のコントロールのLeaveイベントでエラーフラグが解除されると通常の動作をさせます。

問題は1.のDateTimePicker1.ShowUpDown を = True にした為にDateTimePicker1の▼部の表示が違ってきます。

DateTimePicker1.ShowUpDown を = True 、 False にするタイミングは適宜考えてください。

以上 御参考までに 
>問題は1.のDateTimePicker1.ShowUpDown を = True にした為にDateTimePicker1の▼部の表示が違ってきます。
もう一つ問題が。。。当初、カレンダが表示されない方法の質問だったんですが、
>言葉が足りませんでした、カレンダーを出さないではなく、
>日付変更を行えないようにしたいのです。
となり、アップダウンボタンでもクリックされて日付が変更されるのはダメみたいです。
結局、どっかでマウスの操作をどうにかする必要はありそうです。

…まぁ、アップダウンボタンにすればAlt + ↓キーでカレンダ表示は防げるんですけどねw
私の案は

DateTimePicker1.ShowUpDown = False 時は DateTimePicker1にフォーカスがない状態でも▼をクリックするとカレンダー表示しますので次のようにします。

エラー時にDateTimePicker1.ShowUpDown を = True にしカレンダーを表示しなくする。

エラー時値変更させないようにDateTimePicker1にフォーカスを入れない。

エラーがなくなれば全て元に戻す。

ま、こんなところでしょうか?
■No16767に返信(エツさんの記事)
おおぅ(><)DateTimePicker ってフォーカスがないと、アップダウンボタンの値変更が
できないんですね(^^;)。。。これは失礼しました。

# なんか抜け道探しみたいで、バグだったら修正されることも恐れないといけない
# ので不安ですが。。。アップダウンするパーツが特定されないといけないから
# ありっちゃありなのかも?。。。へぇ。そんな動きになってたんですねぇ。。。
2006/07/21(Fri) 18:39:09 編集(投稿者)
2006/07/21(Fri) 18:39:00 編集(投稿者)

KEI様 るしぇ様 エツ様

じゅでです。
何時もお世話になっております。

返答が遅れまして申し訳ございません。
病院へ行っていたため返答が遅れました。

まず、誤解を招く独自コントロールの件については申し訳ございません。
作成は今現在でも不可である事には変わっていませんが、
提案用にこうすればできますよという事の為であるとともに
お勉強の為でもあります。

るしぇ様ありがとうございます。

> DateTimePicker独自クラスのWndProc をオーバーライドし、表示したくない場合はbaseのWndProcを呼ばなければいいので簡単です。しかし再描画の問題もありますので注意が必要です。

以下の通りにしてみます。
WndProcで駄目な場合はスーパークラスの再描画メソッド呼ぶだけになるのかなぁ〜っと想像だけしてますが、作って試して駄目ならまた質問してみます。

っと打ち合わせがまだあり、全部見きれてないので、いったんここで返答をおわらせていただきます。

各自このような質問の為お時間をさいていただいて本当にありがとうございました。

また別途返答させていただきますので、しばらくお待ちください。

以上

#っというかマシンがとんだので・・・環境設定からやり直しですorz
KEI様 るしぇ様 エツ様

じゅでです。
何時もお世話になっております。

返答が遅れて申し訳ございません。

16746 KEI様

> 自分がどうこう出来るレベルを超えてますが…マウスのイベントフックをする
> 方法もありかも知れません。
> 一応ご参考になればと思います。
> http://hongliang.seesaa.net/article/7651626.html

フックはすっかり頭からぬけおちておりました。
確かにいけるかもしれません。
今後の為にメモをしておきます。
大変参考になりました。

16746 エツ様

16773 の回答を返答ということで。
ありがとうございます。

16759 るしぇ様

> DateTimePicker で WndProc をオーバーライドを許すのかどうかが重要ですね。
> 許すのであれば、
> マウスのクリックを弾いてカレンダーを表示させないことはできます。
> 後はキーボード関係をずらずら書くことになるでしょうか。。。

許してゆるしていただけませんでした。
仕方がないので、DateTimePickerの隣にテキストボックスを配置し▼ボタンのみ
表示される状態でテキストボックスにフォーカスがある状態でのみ選択可能
っというつくりになりました。
また、キーボード操作などの自分が想定していた物以外にも必要な事が有る事を
しれ、大変助かりました。
ありがとうございました。

16762 エツ様

> 問題は1.のDateTimePicker1.ShowUpDown を = True にした為に
> DateTimePicker1の▼部の表示が違ってきます。

やはり、できることならそのような見た目が変わってしまうような事を
やりたくはなかったため、対処方法としては外しました。
状態によって選択形式のボタンの見た目と動作が変わってしまうのは、
やはりよくはないだろうということで。
また、16766でるしぇ様がおっしゃっているように日付変更が起こってしまうのを
防ぎたかった為駄目でした。

16766 るしぇ様

私が返答できない間に変わりの返答をありがとうございました。

16767 エツ様

やはり見た目の問題上です。
こちらの仕様の代案ありがとうございました。
しかし、次でるしぇ様がおっしゃっている通り私もその動作は初耳でした。
今後のやくに建てたいと思います。

沢山のご意見ありがとうございました。
今後の為になる事ばかりで、自分もまだまだと実感させていただきました。

本当にありがとうございます。

以上

# マシンは基盤がいかれてるらしいですorz
# 昨日修理に来たCEが確認したらしいのにどういう修理の確認方法をしてるのかと
# 涙が出そうです・・・
# 開発機が自分もちのノートとディスプレイが大きくないと駄目(お客さん都合)
# により自分もちのディスプレイで開発するはめに・・・orz
# その為環境設定などでいろいろとインストールする為に返答が
# 遅れてしまいました。申し訳ありませんでした。
# 独自コントロールについては作ってみてわからなければ別途質問します。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板