- ベストアンサー
コントロールに触れたら使用可能に!どのイベントを使えばいい?
- 質問者は、コントロールに触れたら使用可能にしたいと考えています。通常は「使用可能」を「いいえ」にして、テキストボックスにカーソルが振れたら、「はい」にすることを希望しています。しかし、どのイベントを使えばよいかわからないようです。
- 質問者は、クリックしなければ動作しないイベントを探しています。コントロールに触れたら使用可能にするためには、以下のイベントを使用すると良いでしょう。
- 1. Enterイベント:テキストボックスにカーソルが入った際に動作します。 2. GotFocusイベント:テキストボックスがフォーカスを受け取った際に動作します。 3. LostFocusイベント:テキストボックスがフォーカスを失った際に動作します。 4. MouseUpイベント:マウスボタンを離した際に動作します。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
No8の、 >プロパティで「線の種類」を >「透明」にします。 は、 プロパティで「境界線スタイル」を 「透明」にします。 です。失礼しました。 なお、「背景スタイル」はデフォルトでは 「透明」になっていると思うのですが、 そのあたりは確認してみてください。
その他の回答 (8)
- piroin654
- ベストアンサー率75% (692/917)
No1~No4です。 ついでなので、ラベルよりもほんの少しましな ものがありました。それは「四角形」です。 ツールボックスより取り出し、テキストボックスと 同じ大きさにします。プロパティで「線の種類」を 「透明」にします。テキストボックスに重ね、 ラベルの場合と同じように「四角形」の 「マウスボタン移動時」のイベントで、 Private Sub ボックス1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Me!テキスト0.Enabled = True End Sub とします。これならば質問の >通常は「使用可能」を「いいえ」にして、テキストボックスにカーソルが振れたら、 >使用可能を「はい」にしたいのですが の感触と同等のものになるのでは、と思います。 まあ、しかし何を使うにせよ、どんなイベントを利用するにせよ、 テキストボックスの「使用可能」が「いいえ」となっている以上 テキストボックスは「冬眠」状態ですから、起こすには 他のオブジェクトなどのイベントを利用してテキストボックスの プロパティをいじくるようになります。何となく「他人の褌で相撲をとる」 のような感じですが。
お礼
ありがとうございます。
- chie65536(@chie65535)
- ベストアンサー率44% (8757/19871)
色が微妙に違っていたので訂正。 誤:「前景色」を「12632256」にする。 正:「前景色」を「10070188」にする。 誤:ID.ForeColor = 12632256 正:ID.ForeColor = 10070188
お礼
ありがとうございます。
- chie65536(@chie65535)
- ベストアンサー率44% (8757/19871)
当方の回答の >なお、上記の方法では「ID」のテクストボックスの上にカーソルが居続けると、IDで入力して「ENTER」や「タブ」を押しても、またすぐに「ID」の所にカーソルが戻って脱出不可能になります。 >これで問題がある場合は「IDの上にマウスカーソルがあったら」ではなく「IDの上でマウスカーソルが動いたら」に変更する必要があります。 を行ったのが、以下のものです(変更点のみです) 「マウスボタン移動時」の「イベントプロシージャ」を Private Sub ID_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If MyX <> X Or MyY <> Y Then MyX = X MyY = Y If ID.BackColor <> 16777215 Then ID.SetFocus End If End If End Sub にする。 「標準モジュール」の「(General)」の位置に Public MyX As Single Public MyY As Single の2行を追加する。 これで「IDの上にマウスカーソルがあったら」ではなく「IDの上でマウスカーソルが動いたら」になります。 これで、マウスに触れなければ、テキストボックス「ID」で「ENTER」や「タブ」を押しても、ちゃんと次のコントロールに移動します。
お礼
ありがとうございます。
- chie65536(@chie65535)
- ベストアンサー率44% (8757/19871)
たぶん、以下のような事がしたいのではないですか? ・通常、TABキーを押しても、カーソルが「ID」で止まらない。 ・「ID」の上にカーソルを持って行くと、「ID」で入力状態になる。 であれば、以下のようにします。 テキストボックス「ID」の、 「使用可能」を「はい」にする(ここ重要。質問者さんは「いいえ」にしたいだろうけど、あえて「はい」にしておき、見た目だけ「いいえ」と「はい」を切り替えます) 「背景色」を「-2147483633」にする。 「前景色」を「12632256」にする。 「タブストップ」を「いいえ」にする。 「タブ移動順」を「0以外の適当な値」にする(フォーム作成時に、最初からカーソルがある状態にしないため) 「フォーカス取得時」のイベントプロシージャを Private Sub ID_Enter() ID.BackColor = 16777215 ID.ForeColor = 0 End Sub にする。 「フォーカス喪失時」のイベントプロシージャを Private Sub ID_Exit(Cancel As Integer) ID.BackColor = -2147483633 ID.ForeColor = 12632256 End Sub にする。 「マウスボタン移動時」のイベントプロシージャを Private Sub ID_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If ID.BackColor <> 16777215 Then ID.SetFocus End If End Sub にする。 この方法だと「上に透明なラベルを重ねておく」などよりも簡単で「テキストボックスを移動したりした時に、上に重ねたラベルを移動し忘れる」などのミスを防げます。 なお、上記の方法では「ID」のテクストボックスの上にカーソルが居続けると、IDで入力して「ENTER」や「タブ」を押しても、またすぐに「ID」の所にカーソルが戻って脱出不可能になります。 これで問題がある場合は「IDの上にマウスカーソルがあったら」ではなく「IDの上でマウスカーソルが動いたら」に変更する必要があります。
お礼
ありがとうございます。
- piroin654
- ベストアンサー率75% (692/917)
何度もすみません。 ラベルの大きさを一回りか二回り小さくしないと、 テキストボックスへの入力ができないかもしれません。 そのあたりは大きさを調節してください。小さくして 度真ん中におけばいいのでは、と思います。
お礼
ありがとうございます。
- piroin654
- ベストアンサー率75% (692/917)
少し姑息な方法はありますが。 たとえば、ラベルを一つテキストボックスと同じ 大きさに設定し、ラベルに「OK」などと入れて 保存し、ラベルの前景色、背景色を透明にし、 ラベルの上にテキストボックスを置き、 ラベルの「マウスボタン移動時」のイベントで Private Sub ラベル3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Me!テキスト0.Enabled = True End Sub とすれば、まるで触れただけで・・・・、というような ことができます。 なお、No2でのフォームのダブルクリックは ひょっとしたらイベントが励起されないかもしれません。
お礼
ありがとうございます。
- piroin654
- ベストアンサー率75% (692/917)
No1です。失礼しました。 >通常は「使用可能」を「いいえ」 見落としていました。 使用不可だから、テキストボックスへの 直接のイベントは受け付けないので と思いますが。 ボタンクリックやフォームのダブルクリック などのイベントで解除するしかないのでは?
お礼
ありがとうございます。
- piroin654
- ベストアンサー率75% (692/917)
テキストボックスの「マウスボタン移動時」のイベントで、 Private Sub テキスト0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) MsgBox "OK" End Sub
お礼
うお!なんだかたくさんのご回答をいただいています! 一つずつ検証していきます。
お礼
ありがとうございます。