環境: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
KEY DOWNで処理しているのが問題かと・・・
KEY UP か、KEY PRESS に変更するとどうなりますか?
治れば、なぜかが解るかと・・・
以上。
補足
それでもフォーカスがあたらない場合は、あてたいオブジェクト
にフォーカス移動させる指示を追記すれば解消するかと。
以上。
オショウさんありがとうございます。
DLLも該当プロジェクトも両方KeyPressにF10
を割り付けると治りました。
そこで下記のように解釈したのですが間違っていないでしょうか?
KeyDownイベントはKeyが押されている間発生するイベント
だからDLLのKeyDownイベントのF10処理でF10が押しっぱなしに
なっているように認識されて、制御が正常に戻っていなかった。
KeyUpイベントはKeyが押されて上がる時に発生するから
Keyが押されていない状態でF10の処理がされる為、制御は
正常に戻ったと考えました。
一応現象は治ったので解決とさせていただきます。
アドバイスありがとうございました。
ツイート | ![]() |