- PR -

テキストボックスの入力制限をするには? (Windows.Forms)

投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-05-09 16:12
引用:

ペーストを禁止しているのではなく、数字が含まれているペーストのみを禁止しています。



すみません、たしかにそうですね。WM_PEAST という時点で流し読みしかしていませんでした。

あきらめて WM_CHAR, WM_PASTE を統合して DocumentFilter まがいのものを自作してみることにします。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2008-05-09 18:00
俺の示したキーワードでわからんかったのか・・・
読み込みが足りない+思い込みが激しいのかと思ったら

>やはりそうなりますか…。
って知っていて聞いていたのならそう書いておけばよかったのに。

[ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2008-05-09 19:30 ]
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-05-09 20:27
引用:

俺の示したキーワードでわからんかったのか・・・


はい。分かりませんでした。レスを読んで検索する前は .NET でも、できるんだなと期待に胸を膨らませて検索結果を流し読みしたのですが…。出てきたのは、不完全な方法とウィンドウメッセージを使う方法だけで、期待はずれでした。

引用:

知っていて聞いていたのならそう書いておけばよかったのに。


Java (Swing) では できるって書きましたよ? Swing は当然 Windows でも実装されているわけで、Swing でできているんだから Windows でできるのは当たり前と思っていました。がんばってウィンドウメッセージを弄べば実現できないことはないだろう、という認識は持っていました。(実際、そういう Windows アプリケーションって昔からありますし。)

個人的に「Windowsでできる」と「.NETでできる」は違うものだと思ってますので、「C言語でできますか?」という質問に対して「インラインアセンブラでできるよ」とか、「Javaでできますか?」という質問に対して「JNI使ったらできるよ」と返ってきたような感じで、期待はずれだったのです。

わざわざ、回答してくださった方々すみませんでした。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-05-09 23:23
引用:

未記入さんの書き込み (2008-05-09 20:27) より:
引用:

知っていて聞いていたのならそう書いておけばよかったのに。


Java (Swing) では できるって書きましたよ? Swing は当然 Windows でも実装されているわけで、Swing でできているんだから Windows でできるのは当たり前と思っていました。がんばってウィンドウメッセージを弄べば実現できないことはないだろう、という認識は持っていました。(実際、そういう Windows アプリケーションって昔からありますし。)



ぶさいくろうさんがおっしゃっているのは「WM_PASTEに応答する方法は知っているけど、使いたくない」という意思表示かと。

Swingではできることを知っているというコメントから、
Windowsメッセージに応答するのはNGというのをどう読み取れというのでしょうか。
それは無茶というものではありませんか?

引用:

個人的に「Windowsでできる」と「.NETでできる」は違うものだと思ってますので、「C言語でできますか?」という質問に対して「インラインアセンブラでできるよ」とか、「Javaでできますか?」という質問に対して「JNI使ったらできるよ」と返ってきたような感じで、期待はずれだったのです。



言いたいことはわかります。Windowsの持つ仕組みに根ざした低レベルなインターフェイスを使わずに実現したかったということですよね。
しかし、WndProcというprotectedなメソッドをオーバーライドするという.NET Frameworkで提供されているごく基本的なことで実現できるので、「インラインアセンブラ」「JNI」との比較は少し的外れだと思いますよ。

JavaのSwingでこれを実現するために、DocumentFilterを使う必要があるということを知ることと、.NET(の現バージョン)では、WndProcを使う必要があるということを知ることと何か違いますか?

Javaでの開発をするのにJavaのことを知る必要があるのと同様にWindowsでの開発にWindowsのことを知る必要があるのと大差ありません。
Javaが開発者のありとあらゆる要望に対応しているわけではないのと同様に.NET Frameworkも開発者のありとあらゆる要望に対応しているわけではありません。というだけかと思います。
#対応してくれていたらいいのになぁとは私も思いますけど。
#そういった機能追加への要望がMSへフィードバックされていない(か少ない)のでしょう。
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-05-10 00:33
引用:

ぶさいくろうさんがおっしゃっているのは「WM_PASTEに応答する方法は知っているけど、使いたくない」という意思表示かと。


そこまで意思表示しないといけませんでしたか。ここの回答者の方々は質問者に対する要求レベルがずいぶんと高いようですね。私に言わせれば、今回の件では、質問の質より、ぶさいくろうさんの回答の質のほうが低いと感じました。

私だったら「よくある質問」「検索結果の上位にピンポイントで回答が出てくる」ようなときくらいしか「○○で検索して」という回答はしません。今回は、検索結果の上位にピンポイントの回答は出てきませんでした。

私の要求レベルが、ぶさいくろうさんには理解できなかったのだと思いますが「Java には
キー入力とペーストを統合的に扱える DocumentFilter という便利なものがあります。.NET ではこのようなことはできますか?」という質問です。

これに対して「○○で検索して」という回答があったら、ふつうは DocumentFilter と同様の高機能なクラスが提供されていると期待しますよね。そのようなクラスがないのなら、「○○で検索して」などといういい加減な回答ではなく「そのようなクラスはないが、ウィンドウメッセージを直接扱えば実現できる。○○で検索するとC#での実装例も出てくる」くらいの説明はあっても良かったと思います。(少なくとも私ならその程度の説明を付加して回答します。)

ぶさいくろうさんの回答は期待はずれでした。挙句、「知っていて聞いていたのならそう書いておけばよかったのに。」ですか。私は逆に「高機能クラスが存在しなくてウィンドウメッセージを直接処理する必要があるんだったら、そのくらい回答に書いておけばいいのに。」と思いました。

引用:

Swingではできることを知っているというコメントから、Windowsメッセージに応答するのはNGというのをどう読み取れというのでしょうか。それは無茶というものではありませんか?


そのように読み取る必要はないでしょう。Swing でできる、DocumentFilter という便利なものがある。.NET ではどうなの?っていう質問なんですから。そこから、私が高レベルAPIを求めていることが読み取れませんか? 読み取れないのであれば仕方ないです。ここの回答者にそこまでの質を求めた私が間違っていたというだけの話です。

引用:

しかし、WndProcというprotectedなメソッドをオーバーライドするという.NET Frameworkで提供されているごく基本的なことで実現できるので、「インラインアセンブラ」「JNI」との比較は少し的外れだと思いますよ。


そうですか?同じような関係だと思いますけど。WndProcをオーバーライドして利用するというのはウィンドウメッセージを扱うための仕組みを提供しているだけであって、具体的になんらかの機能を提供しているわけではないですよね。(なんらかの機能=キー入力とペーストを統合して文字入力を扱う機能など。) 実際は、その仕組みを使って自分で機能を実装しないといけないわけです。機能ではなく機能を実装するための仕組みを提供しているだけという点で、まさにインラインアセンブラやJNIと同じ関係のように思えます。

引用:

Javaでの開発をするのにJavaのことを知る必要があるのと同様にWindowsでの開発にWindowsのことを知る必要があるのと大差ありません。


そうですか。それは残念なことです。Javaでの開発をするのにJavaのことを知る必要がある、.NETの開発をするのに.NETのことを知る必要がある、というのなら理解できます。そうではなく、.NETの開発をするのにWindowsのこと(Win32APIやウィンドウメッセージ)を知る必要があるということなのですね。

.NET Framework に期待しすぎていたようです。今回のことで、.NET Framework が Windows アプリケーションの開発フレームワークとして、まだ不十分なものだということは良く分かりました。

どうもありがとうございました。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-05-10 08:16
[quote]
未記入さんの書き込み (2008-05-10 00:33) より:
引用:

私が高レベルAPIを求めていることが読み取れませんか? 読み取れないのであれば仕方ないです。ここの回答者にそこまでの質を求めた私が間違っていたというだけの話です。



APIはあくまでも部品で自分が目的とする機能はAPIやらなんかのメソッド自分で実装するか。
別の方法で要求を実現するものだと思いますが

さらにこの手の掲示板では必ずしもピンポイントの解答をもらえるわけではありません。
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-05-10 08:16
引用:

.NETの開発をするのにWindowsのこと(Win32APIやウィンドウメッセージ)を知る必要があるということなのですね。


当たり前です。

.NET Framework は Windows の API をできるだけ意識せずに
プログラミングできるように作られています。
しかし、意識しないとはいえ使っているのですから、理解しておく必要はあるでしょう。
理解していなくてもある程度のものは作れますよ。
でも今回のようなケースに対応できません。

Swing には明るくありませんが、Swing にだって
基本機能だけでできることと、そうでないことがあるでしょう?
で、そこを超えたら「インラインアセンブラ」「JNI」のようなものを
使うしかなくなるわけで….NET もそうだというだけだと思います。
基本機能でカバーしている範囲が違うということでしょう。
逆に .NET にできて Swing にできない(あくまで基本機能だけで)こともあると思います。

引用:

.NET Framework に期待しすぎていたようです。今回のことで、.NET Framework が Windows アプリケーションの開発フレームワークとして、まだ不十分なものだということは良く分かりました。



TextBox に DocumentFilter がないという理由だけで、.NET Framework の採用を諦めるのですか?
ないものは作ればよいという発想はないのでしょうか?
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-05-10 09:45
引用:

テッテさんの書き込み (2008-05-10 08:16) より:

TextBox に DocumentFilter がないという理由だけで、.NET Framework の採用を諦めるのですか?
ないものは作ればよいという発想はないのでしょうか?



その発想があることは、

引用:

未記入さんの書き込み (2008-05-09 16:12) より:

あきらめて WM_CHAR, WM_PASTE を統合して DocumentFilter まがいのものを自作してみることにします。



という発言から明らかだと思います。
DocumentFilter というものの存在を私はこのスレッドで初めて知りましたので、
いろいろと勉強になりました。ありがとうございます。


あの後、DocumentFilter と同様のものが.NETで誰か作成されてないか、
いろいろと検索してみたのですが、残念ながら見つかりませんでした。
自作されるのが手っ取り早いと思います。

# IMEがオンの場合まで DocumentFilter と同様の動作をさせることは難しいかもしれませんが…。
# ということを↓のBlogを読んで思いました。
# http://d.hatena.ne.jp/Kazzz/20080121/p1

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