フォーカスを外すには

タグの編集
投稿者 ultie  (高校生) 投稿日時 2010/1/20 03:23:50
はじめまして。vbを始めて3日くらいです。

質問ですが、
testboxに文字を入力したり、comboboxで選択した後、panelやformをクリックしてフォーカスを外したいんですが、どうすればいいでしょうか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/1/20 03:55:27
> testboxに
TextBox ?

> panelやformをクリックしてフォーカスを外したいんですが
それぞれの Click イベントに、「ActiveControl = Nothing」と書いておくのは如何でしょう。


あるいはこんな方法とか。あまりお奨めはしませんけれども。

Public Class Form1

    Protected Overrides Sub WndProc(ByRef m As Message)
        Const WM_LBUTTONDOWN As Integer = &H201
        Const WM_PARENTNOTIFY As Integer = &H210

        If m.Msg = WM_LBUTTONDOWN Then
            ActiveControl = Nothing
        ElseIf m.Msg = WM_PARENTNOTIFY Then
            If (m.WParam.ToInt32() And &HFFFFI) = WM_LBUTTONDOWN Then
                ActiveControl = Nothing
            End If
        End If

        MyBase.WndProc(m)
    End Sub
End Class
投稿者 ultie  (高校生) 投稿日時 2010/1/20 06:55:45
回答ありがとうございます。

2番目の方法は何をやっているか理解できなかったのですが、最初の方法でできました。
またお世話になるかもしれませんが、よろしくお願いします。
投稿者   (社会人) 投稿日時 2010/1/21 00:42:06
でも、そうすると入力後のタブ移動とかできなくなるよね?
何でそんなことしたいと思ったの??
すごく使いにくそうなんだけど。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/1/21 00:50:39
> でも、そうすると入力後のタブ移動とかできなくなるよね?

具体的にはどういう状態でしょうか?

# 「panelやformをクリックした時」と「タブ移動した時」は別のタイミングなので、
# タブ移動への影響は無いと思っていました。
投稿者 ultie  (高校生) 投稿日時 2010/1/21 01:17:30
今回質問したことの目的ですが、ComboBoxで選択した後まだフォーカスがある(青で反転している)状態でページをスクロールしたいときに、マウスでスクロールするとリストのほうがスクロールされてしまうので、それを解消するためです。

タブ移動については、特に問題なかったのですが、ほかにも何か良い方法があるでしょうか?
投稿者 ヴァン  (社会人) 投稿日時 2010/1/21 01:50:23
この場合はマウスのスクロールをキャンセルするようにするのが正解かと。

ComboBoxを継承したクラスを作成して、スクロールのメッセージを除けば出来ますよ。
投稿者 在浩  (社会人) 投稿日時 2010/1/21 09:24:55
Option Explicit

Private Sub Form_Load()
   txtView ="ああ"
End Sub

Private Sub cbo1_Click()
   txtView.SetFocus
End Sub

ComboBoxの内容が変わるとFocusがTEXTBOXコントロールに移動され、スクロールされていません。
必要とするコードがLoadイベントに記述すると、一切できませんのでformにsetfocusメソッドを使用することが
ご利用いただけます。したがって、TEXTBOXあるいはCOMMAND BUTTONのFOCUSを受け取ることができるコントロールが必要です。

この方法以外に、他の方法がある場合は、Hookingを参照してください。

回答の内容が正しいかよく分からないです。