vb2010 フォーカスを点滅させるには?

解決


フモフモ  2012-05-30 10:44:56  No: 147608  IP: 192.*.*.*

環境:vb2010 , Windows7 Pro(SP1) , Oracle11gR2  , ImputMan6.0j

下記作業をした時に指定したオブジェクトにフォーカスは
あるみたいなのですが「|」が点滅状態になっておらず
一回何かkeyをおすと点滅状態になって入力が反映されます。
まとまりのない文章になったり、説明不足な部分もあるかとは
思いますがご教示お願いします。

作業
①データベースのテーブルから1レコードを取得して画面に表示
②F10を2回押して更新(メッセージ画面でF10ではなくマウスで「はい」をクリックした時は問題の現象は発生しません)

※更新は「更新」ボタンを作成して、「更新」ボタンの Clickイベント
中にデータベースの更新処理をかいています。
そしてフォームの KeyDown イベントでF10の時に「更新」ボタンClickイベントを呼び出ししています。
もう1つ「更新」ボタンClickイベントに確認メッセージ(DLL)を出力してその
メッセージ画面でも「はい」をKeyDownイベントのF10に割り当てています。

メッセージ画面のDLLではYes,Noの値を値渡ししています。  

ちなみにVB6では問題なく、VB2005ではフォームのKeyDownイベントのF10割り当て処理の最後にe.Handled=Trueを追記したら現象は回避出来ていました。

フォームのKeyDownイベントにMe.activate をいれてみましたが駄目でした。
検索の仕方が悪いのか思うような内容がヒットせず悩んでいます。
宜しくお願いします

コードの一部
    'フォームのKeyDowunイベント
    Private Sub H40_01EF1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        Select Case e.KeyCode
            Case &H70S ' f・1    終了処理
                '
            Case &H71S ' f・2    戻る
                If BtnReset.Enabled = True Then
                    Call BtnReset_Click(BtnReset, New EventArgs())
                End If
                e.Handled = True
            Case &H72S ' f・3
                '
            Case &H73S ' f・4
                '
            Case &H74S ' f・5
                '
            Case &H75S ' f・6    入力(KEY)
                If BtnNyuryoku.Enabled = True Then
                    Call BtnNyuryoku_Click(BtnNyuryoku, New EventArgs())
                End If
                e.Handled = True
            Case &H76S ' f・7
                '
            Case &H77S ' f・8
                '
            Case &H78S ' f・9    更新継続(DATA)
                '
            Case &H79S ' f・10    更新(DATA)
                If BtnKoushin.Enabled = True Then
                    Call BtnKoushin_Click(BtnKoushin, New EventArgs())
                End If
        End Select
    End Sub

    'データ更新処理
    Private Sub BtnKoushin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnKoushin.Click
        Select Case W_Mode
            Case "照会"
                '-- 画面クリア --
                Call Clr_Data()
                '-- Key部へ移動 --
                Call Mov_Key()
                Me.TexSeq.Select()
                Exit Sub
            Case "新規", "変更"
                '-- 項目チェック --
                Call Chk_All()
                If St <> 0 Then
                    St = 0
                    Exit Sub
                End If
        End Select
        '-- 確認メッセージ表示 --
        Select Case W_Mode
            Case "新規"
                Call MSG_01SP.Serch(W_Mode, My.Application.Info.Title, "データを追加します。よろしいですか?", St)
            Case "変更"
                Call MSG_01SP.Serch(W_Mode, My.Application.Info.Title, "データを変更します。よろしいですか?", St)
            Case "削除"
                Call MSG_01SP.Serch(W_Mode, My.Application.Info.Title, "データを削除します。よろしいですか?", St)
        End Select
        If St = MsgBoxResult.No Then
            Me.BtnReset.Select()
            Exit Sub
        End If
        '--カーソル設定 --
        Me.Cursor = Cursors.WaitCursor
        '-- 更新処理 --
        Call Koushin_Rtn()
        '-- エラー処理及びトランザクション処理 --
        If Flg_Roll = " " Then
            'コミット(更新最終確定)
            Trn.Commit()
        Else
            'ロールバック(更新内容破棄)
            Trn.Rollback()
        End If
        'DB接続解除
        OraCon.Close()
        'ロック画像解除
        PtbLock.Visible = False
        '画面設定
        Call Clr_Data()
        If W_Mode = "新規" Then
            Call Shinki_Rtn()
        Else
            '-- Key部へ移動 --
            Call Mov_Key()
            Me.TexSeq.Focus()
        End If
        '-- カーソル設定
        Me.Cursor = Cursors.Default
    End Sub

編集 削除
オショウ  2012-05-30 12:03:55  No: 147609  IP: 192.*.*.*

KEY DOWNで処理しているのが問題かと・・・
KEY UP か、KEY PRESS に変更するとどうなりますか?

治れば、なぜかが解るかと・・・

以上。

編集 削除
オショウ  2012-05-30 12:06:03  No: 147610  IP: 192.*.*.*

補足
それでもフォーカスがあたらない場合は、あてたいオブジェクト
にフォーカス移動させる指示を追記すれば解消するかと。

以上。

編集 削除
フモフモ  2012-05-30 15:01:19  No: 147611  IP: 192.*.*.*

オショウさんありがとうございます。

DLLも該当プロジェクトも両方KeyPressにF10
を割り付けると治りました。

そこで下記のように解釈したのですが間違っていないでしょうか?

KeyDownイベントはKeyが押されている間発生するイベント
だからDLLのKeyDownイベントのF10処理でF10が押しっぱなしに
なっているように認識されて、制御が正常に戻っていなかった。
KeyUpイベントはKeyが押されて上がる時に発生するから
Keyが押されていない状態でF10の処理がされる為、制御は
正常に戻ったと考えました。

編集 削除
フモフモ  2012-05-31 09:00:07  No: 147612  IP: 192.*.*.*

一応現象は治ったので解決とさせていただきます。

アドバイスありがとうございました。

編集 削除