- PR -

Enterキーでのフォーカス移動(漢字変換中のEnterキーを拾う不都合)

1
投稿者投稿内容
ゆうパパ
会議室デビュー日: 2005/04/21
投稿数: 11
投稿日時: 2005-05-13 15:53
現在、VB6より乗り換えて、VB.NETでWindowsアプリを開発しています。

Enterキーが押されたときに、TABキーと同様の動作をさせて
TabIndex順にフォーカスを移動させる処理を作成中なのですが、
この会議室を参考にさせていただき、以下のようにプログラミングしました。

Private Sub TextBox1_KeyDown(ByVal sender As Object, _
ByVal e As _Sytem.Windows.Forms.KeyEventArgs) _
Hadles TextBox1.KeyUp
If e.KeyCode = Keys.Enter Then
Me.SelectNextControl(sender, True, True, True, True)
End If
End Sub

これで、うまく動作したのですが、一点、不都合がありました。
それは、漢字変換の確定のEnterキーも拾ってしまうので、
漢字変換の途中に、フォーカスが移動してしまうのです。

VB6の時は、

Private Sub TextBox1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
KeyCode = 0
SendKeys "{TAB}"
End If
End Sub

で、漢字変換のEnterキーは拾わず、うまくいっていたのですが・・・。

もし、何かアドバイス等がありましたら
ぜひご教授くださいますようお願い致します。


[ メッセージ編集済み 編集者: ゆうパパ 編集日時 2005-05-13 15:56 ]
KIMERA
大ベテラン
会議室デビュー日: 2003/02/28
投稿数: 112
お住まい・勤務地: 兵庫県・大阪府
投稿日時: 2005-05-13 16:09
こんにちわ。

コントロールがアクティブ(入力状態)である場合には、移動をスルーさせるようにすればよいと思います。

If Not TypeOf Me.ActiveControl Is TextBox And (CType(Me.ActiveControl, TextBox)).Multiline = True Then
Me.SelectNextControl(....略
End If

こんな感じでどうでしょう?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-05-13 16:23
こんにちは、じゃんぬ です。

引用:

それは、漢字変換の確定のEnterキーも拾ってしまうので、
漢字変換の途中に、フォーカスが移動してしまうのです。


普通は、なりません。

引用:

Private Sub TextBox1_KeyDown(ByVal sender As Object, _
ByVal e As _Sytem.Windows.Forms.KeyEventArgs) _
Hadles TextBox1.KeyUp


KeyDown という名前のわりに、ハンドラが KeyUp になっているからでは?



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2005-05-13 16:25
ゆうパパさんのコード、ちょっと妙じゃないですか?
プロシージャ名がTextBox1_KeyDownなのにHandlesで指定しているのがTextBox1.KeyUpになっていますよ。

KeyUpイベントではなく、KeyDownやKeyPressを使うとうまくいきます。
私はKeyPressを使っています。
ゆうパパ
会議室デビュー日: 2005/04/21
投稿数: 11
投稿日時: 2005-05-13 16:36
KIMERAさん、じゃんぬねっとさん、rucioさん、どうもありがとうございました。
全く、私の単純なミスでした。申し訳ありません。

じゃんぬねっとさん、rucioさんの御指摘どおりです。

実際のコードではプロシージャ名もHandlesもTextBox1_KeyUPでやっていました。
VB6でやっていたコードを見た時、KeyDownイベントでやっていたので、
ここに書き込む時、プロシージャ名だけTextBox1_KeyDownに直していました。

TextBox1_KeyDownイベントに変更したらうまくいきました。
(KeyUPイベントではうまくいかないのですね。)

どうもありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-05-13 16:54
こんにちは、じゃんぬ です。
解決できたようで、良かったです。(^^)

引用:

(KeyUPイベントではうまくいかないのですね。)


変換が確定してから、駆動しますからね。
押した時点で確定 -> フリーの状態に -> キーを押し上げる -> KeyUp イベント発生

# 要らぬレスとは思いますが、後からの方のために。

フォームで [Enter] キーが押された時にフォーカスを遷移させる も参照のこと。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ゆうパパ
会議室デビュー日: 2005/04/21
投稿数: 11
投稿日時: 2005-05-13 17:58
じゃんぬねっとさん、重ね重ねありがとうございます。

「フォームで [Enter] キーが押された時にフォーカスを遷移させる」
にも行ってみました。

他にも色々と参考になりそうなサンプルがおいてありますね。
なかなかこういうサンプルページにいきあたらなくて・・・。
まさに「宝の山をみつけた」状態です。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)