- - PR -
テキストボックスの入力制限をするには? (Windows.Forms)
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-05-09 16:12
すみません、たしかにそうですね。WM_PEAST という時点で流し読みしかしていませんでした。 あきらめて WM_CHAR, WM_PASTE を統合して DocumentFilter まがいのものを自作してみることにします。 | ||||||||||||||||
|
投稿日時: 2008-05-09 18:00
俺の示したキーワードでわからんかったのか・・・
読み込みが足りない+思い込みが激しいのかと思ったら >やはりそうなりますか…。 って知っていて聞いていたのならそう書いておけばよかったのに。 [ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2008-05-09 19:30 ] | ||||||||||||||||
|
投稿日時: 2008-05-09 20:27
はい。分かりませんでした。レスを読んで検索する前は .NET でも、できるんだなと期待に胸を膨らませて検索結果を流し読みしたのですが…。出てきたのは、不完全な方法とウィンドウメッセージを使う方法だけで、期待はずれでした。
Java (Swing) では できるって書きましたよ? Swing は当然 Windows でも実装されているわけで、Swing でできているんだから Windows でできるのは当たり前と思っていました。がんばってウィンドウメッセージを弄べば実現できないことはないだろう、という認識は持っていました。(実際、そういう Windows アプリケーションって昔からありますし。) 個人的に「Windowsでできる」と「.NETでできる」は違うものだと思ってますので、「C言語でできますか?」という質問に対して「インラインアセンブラでできるよ」とか、「Javaでできますか?」という質問に対して「JNI使ったらできるよ」と返ってきたような感じで、期待はずれだったのです。 わざわざ、回答してくださった方々すみませんでした。 | ||||||||||||||||
|
投稿日時: 2008-05-09 23:23
ぶさいくろうさんがおっしゃっているのは「WM_PASTEに応答する方法は知っているけど、使いたくない」という意思表示かと。 Swingではできることを知っているというコメントから、 Windowsメッセージに応答するのはNGというのをどう読み取れというのでしょうか。 それは無茶というものではありませんか?
言いたいことはわかります。Windowsの持つ仕組みに根ざした低レベルなインターフェイスを使わずに実現したかったということですよね。 しかし、WndProcというprotectedなメソッドをオーバーライドするという.NET Frameworkで提供されているごく基本的なことで実現できるので、「インラインアセンブラ」「JNI」との比較は少し的外れだと思いますよ。 JavaのSwingでこれを実現するために、DocumentFilterを使う必要があるということを知ることと、.NET(の現バージョン)では、WndProcを使う必要があるということを知ることと何か違いますか? Javaでの開発をするのにJavaのことを知る必要があるのと同様にWindowsでの開発にWindowsのことを知る必要があるのと大差ありません。 Javaが開発者のありとあらゆる要望に対応しているわけではないのと同様に.NET Frameworkも開発者のありとあらゆる要望に対応しているわけではありません。というだけかと思います。 #対応してくれていたらいいのになぁとは私も思いますけど。 #そういった機能追加への要望がMSへフィードバックされていない(か少ない)のでしょう。 | ||||||||||||||||
|
投稿日時: 2008-05-10 00:33
そこまで意思表示しないといけませんでしたか。ここの回答者の方々は質問者に対する要求レベルがずいぶんと高いようですね。私に言わせれば、今回の件では、質問の質より、ぶさいくろうさんの回答の質のほうが低いと感じました。 私だったら「よくある質問」「検索結果の上位にピンポイントで回答が出てくる」ようなときくらいしか「○○で検索して」という回答はしません。今回は、検索結果の上位にピンポイントの回答は出てきませんでした。 私の要求レベルが、ぶさいくろうさんには理解できなかったのだと思いますが「Java には キー入力とペーストを統合的に扱える DocumentFilter という便利なものがあります。.NET ではこのようなことはできますか?」という質問です。 これに対して「○○で検索して」という回答があったら、ふつうは DocumentFilter と同様の高機能なクラスが提供されていると期待しますよね。そのようなクラスがないのなら、「○○で検索して」などといういい加減な回答ではなく「そのようなクラスはないが、ウィンドウメッセージを直接扱えば実現できる。○○で検索するとC#での実装例も出てくる」くらいの説明はあっても良かったと思います。(少なくとも私ならその程度の説明を付加して回答します。) ぶさいくろうさんの回答は期待はずれでした。挙句、「知っていて聞いていたのならそう書いておけばよかったのに。」ですか。私は逆に「高機能クラスが存在しなくてウィンドウメッセージを直接処理する必要があるんだったら、そのくらい回答に書いておけばいいのに。」と思いました。
そのように読み取る必要はないでしょう。Swing でできる、DocumentFilter という便利なものがある。.NET ではどうなの?っていう質問なんですから。そこから、私が高レベルAPIを求めていることが読み取れませんか? 読み取れないのであれば仕方ないです。ここの回答者にそこまでの質を求めた私が間違っていたというだけの話です。
そうですか?同じような関係だと思いますけど。WndProcをオーバーライドして利用するというのはウィンドウメッセージを扱うための仕組みを提供しているだけであって、具体的になんらかの機能を提供しているわけではないですよね。(なんらかの機能=キー入力とペーストを統合して文字入力を扱う機能など。) 実際は、その仕組みを使って自分で機能を実装しないといけないわけです。機能ではなく機能を実装するための仕組みを提供しているだけという点で、まさにインラインアセンブラやJNIと同じ関係のように思えます。
そうですか。それは残念なことです。Javaでの開発をするのにJavaのことを知る必要がある、.NETの開発をするのに.NETのことを知る必要がある、というのなら理解できます。そうではなく、.NETの開発をするのにWindowsのこと(Win32APIやウィンドウメッセージ)を知る必要があるということなのですね。 .NET Framework に期待しすぎていたようです。今回のことで、.NET Framework が Windows アプリケーションの開発フレームワークとして、まだ不十分なものだということは良く分かりました。 どうもありがとうございました。 | ||||||||||||||||
|
投稿日時: 2008-05-10 08:16
[quote]
未記入さんの書き込み (2008-05-10 00:33) より:
APIはあくまでも部品で自分が目的とする機能はAPIやらなんかのメソッド自分で実装するか。 別の方法で要求を実現するものだと思いますが さらにこの手の掲示板では必ずしもピンポイントの解答をもらえるわけではありません。 | ||||||||||||||||
|
投稿日時: 2008-05-10 08:16
当たり前です。 .NET Framework は Windows の API をできるだけ意識せずに プログラミングできるように作られています。 しかし、意識しないとはいえ使っているのですから、理解しておく必要はあるでしょう。 理解していなくてもある程度のものは作れますよ。 でも今回のようなケースに対応できません。 Swing には明るくありませんが、Swing にだって 基本機能だけでできることと、そうでないことがあるでしょう? で、そこを超えたら「インラインアセンブラ」「JNI」のようなものを 使うしかなくなるわけで….NET もそうだというだけだと思います。 基本機能でカバーしている範囲が違うということでしょう。 逆に .NET にできて Swing にできない(あくまで基本機能だけで)こともあると思います。
TextBox に DocumentFilter がないという理由だけで、.NET Framework の採用を諦めるのですか? ないものは作ればよいという発想はないのでしょうか? | ||||||||||||||||
|
投稿日時: 2008-05-10 09:45
その発想があることは、
という発言から明らかだと思います。 DocumentFilter というものの存在を私はこのスレッドで初めて知りましたので、 いろいろと勉強になりました。ありがとうございます。 あの後、DocumentFilter と同様のものが.NETで誰か作成されてないか、 いろいろと検索してみたのですが、残念ながら見つかりませんでした。 自作されるのが手っ取り早いと思います。 # IMEがオンの場合まで DocumentFilter と同様の動作をさせることは難しいかもしれませんが…。 # ということを↓のBlogを読んで思いました。 # http://d.hatena.ne.jp/Kazzz/20080121/p1 |