tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルOnEnterでSelectAll
記事No4828
投稿日: 2007/01/17(Wed) 15:05
投稿者DOON
DOONです。いつもお世話になっています
色々調べたのですが、うまくいかず困っています。どなたか助けて欲しいです。
ついにわが社もvb6からvb.net2005に移行するときが来ました。2007年とは遅いですが

いくつかのテキストボックスを貼り付けた画面を作成しています。
単純にテキストボックスにFocusが当たった時にその時のテキストボックスの中身を
全選択したいだけです。

OnEnterもしくはtextbox_Enterで
textbox.selectAll
を書きました。
他のコントロールからのTab移動では
無事成功しました。

でも直接そのテキストボックスをマウスでクリックしても
全選択されません。(vb6.0ではこの時点で全選択してくれる)
しらべたら、EnterあとのMouseDown,MouseUpでそのSelectAllは
消えているとのことでした。
なので、MouseDownにSelectAllを書くのでOKというのを見つけました。
それで無事成功しました。

でもそのテキストボックス内でマウスで部分選択を行おうとすると
全選択になってしまいます。
MouseDown内でSelectAllを書いているのですから当たり前ですよね。

なにかいい解決策をご存知の方助けてください。
この全選択を行うこと自体Windowsの標準から考えたらおかしいのは分かってます。
でも、何年もこういう形で納品してるので、vb.netになったから変更というのは
難しいみたいです。
いろいろ考えたのですが、うまくいきません。
以上よろしくお願いします

[ツリー表示へ]
タイトルRe: OnEnterでSelectAll
記事No4829
投稿日: 2007/01/17(Wed) 15:09
投稿者魔界の仮面弁士
Enter/Leave よりも低レベルなイベント(たとえば、GotFocue/LostFocus)か、あるいは
それに相当する Protected メソッドで、SelectAll してみてはいかがでしょう。

# 試していません。

[ツリー表示へ]
タイトルRe^2: OnEnterでSelectAll
記事No4830
投稿日: 2007/01/17(Wed) 15:18
投稿者DOON
DOONです。いつもお世話になっています。
早速の返事ありがとうございます

> Enter/Leave よりも低レベルなイベント(たとえば、GotFocue/LostFocus)

これは試しましたが、無理でした。

> それに相当する Protected メソッドで、SelectAll してみてはいかがでしょう。
これは、spyなどで動きを見て、メソッドを探すということであってますか?
EnterでSelectAllするよりも、別のメソッドでやろうということであってますか?
ちょっと挑戦してみます

またなにかいい案があればよろしくお願いします。

[ツリー表示へ]
タイトルRe^3: OnEnterでSelectAll
記事No4831
投稿日: 2007/01/17(Wed) 16:28
投稿者Hongliang
こんなのはどうでしょう。

・Boolean のフラグを一つ用意する。
・Enter で SelectAll し、更にフラグを立てる。
・KeyUp でフラグを降ろす。
・MouseDown でフラグが立っていれば SelectAll しフラグを降ろす。

[ツリー表示へ]
タイトルRe^4: OnEnterでSelectAll
記事No4832
投稿日: 2007/01/17(Wed) 16:51
投稿者DOON
DOONです。
返事ありがとうございます
早速やってみました、うまいこといってますね。助かります。
でも、私が中身を理解していないので少し質問させてください。
>
> ・Boolean のフラグを一つ用意する。
この変数は各コントロールに対して一つづつでいいんですよね?

> ・Enter で SelectAll し、更にフラグを立てる。
> ・KeyUp でフラグを降ろす。
このKeyUpは実際なにを狙ってるのでしょうか、Tabボタンきっかけで移動してきた側に
このイベントがおきていますが。



以上よろしくお願いします

[ツリー表示へ]
タイトルRe^5: OnEnterでSelectAll
記事No4833
投稿日: 2007/01/17(Wed) 17:03
投稿者DOON
DOONです。
一応自分で調べたかんじでの答えを書いてみます

> >
> > ・Boolean のフラグを一つ用意する。
> この変数は各コントロールに対して一つづつでいいんですよね?
>
これは、コントロールに対して一つ。

> > ・Enter で SelectAll し、更にフラグを立てる。
> > ・KeyUp でフラグを降ろす。
> このKeyUpは実際なにを狙ってるのでしょうか、Tabボタンきっかけで移動してきた側に
> このイベントがおきていますが。
前のコントロールからTabキーで移動してきた時に、移動してきた側にFOCUSがあたる。
そのFOCUSをもったままkeyを離しているのでkeyupイベントが起こる。

これであってますでしょうか。

実際EnterKeyでも各コントロールを移動しているのを作成していますが、
それでも問題ありませんでした。

しかし、
keyupをこのように使うのはまったく思い浮かびませんでした。
flagをつかったり、mousedownの回数を覚えたり、選択されているかどうかをみたり、
色々やったのですが、稚拙でした
これでユーザーコントロールを作成してみようと思います。

ありがとうございます。

[ツリー表示へ]
タイトルRe^6: OnEnterでSelectAll
記事No4848
投稿日: 2007/01/19(Fri) 08:47
投稿者y4yama
既に解決されているのですが、KeyUpの判断が冗長と感じましたので、考えていたら
次の案が浮かんできました。うまく動いてます。勉強になりました

・Boolean のフラグを一つ用意する。(個々には不要かと)
・Enter で SelectAll し、もしマウスボタンが押されてたらフラグを立てる。
   (System.Windows.Forms.Control.MouseButtonsで判断する)
・MouseDown でフラグが立っていれば SelectAll しフラグを降ろす。

[ツリー表示へ]
タイトルRe^7: OnEnterでSelectAll
記事No4850
投稿日: 2007/01/19(Fri) 09:22
投稿者Hongliang
> ・Boolean のフラグを一つ用意する。(個々には不要かと)
> ・Enter で SelectAll し、もしマウスボタンが押されてたらフラグを立てる。
>    (System.Windows.Forms.Control.MouseButtonsで判断する)
> ・MouseDown でフラグが立っていれば SelectAll しフラグを降ろす。

このときもう Control.MouseButtons は有効でしたか。
MouseDown 前なので考慮外でした。

さらに最適化するなら、Enter イベントでは先にマウスボタンを確認し、
「押されていなければ」SelectAll するようにした方がいいですかね。

[ツリー表示へ]
タイトルRe^8: OnEnterでSelectAll
記事No4851
投稿日: 2007/01/19(Fri) 10:03
投稿者DOON
DOONです。
お世話になります。

y4yamaさん、Hongliangさん。
さらにヒントをありがとうございます。

KeyUpでも目が覚めるようなハンマーセッションでしたのに。
ボタンのマウスの状態がわかるものがあるんですね。
これのほうが、さらに簡単になりそうなので、実装して見たいと思います。

本当にありがとうございました

[ツリー表示へ]