tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDateTimePickerにDoubleClickイベントを追加したい
記事No11738
投稿日: 2016/09/22(Thu) 11:50
投稿者OrientalMelody
いつもお世話になっております。

表題の通り、DateTimePickerにDoubleClickイベントを追加したいと思っているのですが、
可能なのでしょうか?

ヘルプを見ますと
hhttps://msdn.microsoft.com/ja-jp/library/system.windows.forms.datetimepicker.doubleclick(v=vs.110).aspx

「この API は、製品 インフラストラクチャをサポートしており、コードから直接使用されることを想定していません。」

などと記述されていますが、これはどのような意味なのでしょうか?

hhttps://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.doubleclick(v=vs.90).aspx
を見ると、継承元基本コントロールにはDoubleClickイベントは存在しているようですが、
下の方の表でDateTimePickerのDoubleClickイベントを見ると「なし」と書かれています。
継承されたときに削除されたのでしょうか?

再実装することはできないのでしょうか?

恐らく他のコントロール、イベントでも同様かと思いますので、
何かご存知の方がいらっしゃいましたら、ご教示の程宜しくお願いいたします。

使用OS、言語:Win7 64bit、VB2005

[ツリー表示へ]
タイトルRe: DateTimePickerにDoubleClickイベントを追加したい
記事No11739
投稿日: 2016/09/23(Fri) 10:14
投稿者Hongliang
> 「この API は、製品 インフラストラクチャをサポートしており、コードから直接使用されることを想定していません。」
>
> などと記述されていますが、これはどのような意味なのでしょうか?

大抵は、
「本来はprivateやinternalなどで利用者から見えないように作られるべきであるが、
言語やライブラリの仕様上publicやprotectedにせざるを得なかった」
ぐらいの意味です。
今回の場合、基底クラスであるControlクラスがDoubleClickイベントを定義しているため
必然的にDateTimePickerも同じイベントをAPIとして公開することになりますが、
DateTimePickerはDoubleClickをサポートしていないためこのような記述になっているのでしょう。

> hhttps://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.doubleclick(v=vs.90).aspx
> を見ると、継承元基本コントロールにはDoubleClickイベントは存在しているようですが、
> 下の方の表でDateTimePickerのDoubleClickイベントを見ると「なし」と書かれています。
> 継承されたときに削除されたのでしょうか?

仕様上、基底クラスの持っているメンバは必ず派生クラスも持っていなければなりません。
ですので、クラスとしては「削除」することはできません。
ただし、DoubleClickを発生させるコードをDateTimePicker内に記述しなければ、
たとえメンバにDoubleClickイベントを持っていてもそれは決して発生しません。
また、BrowsableAttribute属性を使えば、インテリセンスに表示させないといったことも可能です。

> 再実装することはできないのでしょうか?

DoubleClickの機能を自分で記述することにはなりますが、可能ではあります。
MouseUpで、直前のMouseUpからの経過時間とマウス移動距離が、SystemInformationの
DoubleClickTime/DoubleClickSize以下であれば、みたいな感じでしょうか。

ドロップダウンで表示されるカレンダーの方はまた面倒な話になりますが…。

[ツリー表示へ]
タイトルRe^2: DateTimePickerにDoubleClickイベントを追加したい
記事No11740
投稿日: 2016/09/23(Fri) 16:17
投稿者OrientalMelody
Hongliang様

丁寧なご説明、有難うございます。
納得しました。

> DoubleClickの機能を自分で記述することにはなりますが、可能ではあります。
> MouseUpで、直前のMouseUpからの経過時間とマウス移動距離が、SystemInformationの
> DoubleClickTime/DoubleClickSize以下であれば、みたいな感じでしょうか。

SystemInformationのDoubleClickTime/DoubleClickSizeは良いですね。
検討させて頂きます。

> ドロップダウンで表示されるカレンダーの方はまた面倒な話になりますが…。
MonthCalendarも同様にDoubleClickイベントがありませんが、1日しか選びませんが
特に問題もないので、ドロップダウン考慮不要なこちらにするかもしれません。

もしすぐに進展がありましたら返答させて頂きます。

有難うございました。

[ツリー表示へ]
タイトルRe: DateTimePickerにDoubleClickイベントを追加したい
記事No11741
投稿日: 2016/09/23(Fri) 17:57
投稿者魔界の仮面弁士
> 表題の通り、DateTimePickerにDoubleClickイベントを追加したいと思っているのですが、
> 可能なのでしょうか?

ControlStyles.StandardClick ビットは効きますが、
ControlStyles.StandardDoubleClick ビットには反応しませんね。


DateTimePicker ではありませんが、MonthCalendar への実装例が下記にあります。
仕組みとしては Hongliang さんの No11739 の通り。
http://dotnet.mvps.org/dotnet/faqs/?id=monthcalendardoubleclick&lang=en

[ツリー表示へ]
タイトルRe^2: DateTimePickerにDoubleClickイベントを追加したい
記事No11742
投稿日: 2016/10/03(Mon) 16:01
投稿者OrientalMelody
魔界の仮面弁士様、Hongliang様

> DateTimePicker ではありませんが、MonthCalendar への実装例が下記にあります。
> 仕組みとしては Hongliang さんの No11739 の通り。
> http://dotnet.mvps.org/dotnet/faqs/?id=monthcalendardoubleclick&lang=en

教えて頂いたリンクの内容を、新規追加したユーザーコントロールに貼り付けて、ビルド、
継承されたユーザーコントロールを日付選択画面に貼り付けたところ、
所望の動作を実現できました。

VB.NETでは機能不足のコントロールを継承してプロパティやイベントを追加実装
するのは割と一般的なようですね。

もう少し勉強してみます。

ありがとうございました。

[ツリー表示へ]