DOBON.NET DOBON.NETプログラミング掲示板過去ログ

コンボボックスのFocus移動について

環境/言語:[Win 2000 Pro]
分類:[.NET]

いつもお世話になります。 こうです。
今回質問したいことは、コンボボックスがいくつか並んでいて
コンボボックスでEnterを押せば次のコンボボックスに移動させ
るのようにしようとしたところ、移動はするのですが、移動元の
コンボボックスの文字列が選択状態になったままになってしまい
ます。 これはどのようにすれば回避できるのでしょうか?
以下に簡単なソースを掲載します。
Private Sub Cmb1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Cmb1.KeyDown
If e.KeyCode = Keys.Return Then
Cmb2.Focus()
End If
End Sub

VB6.0ではこのようにはならなかったと思うのですが
よろしくお願い致します。

こう
2004/08/26(Thu) 14:38:49 編集(投稿者)

■No5822に返信(こうさんの記事)
> いつもお世話になります。 こうです。
> 今回質問したいことは、コンボボックスがいくつか並んでいて
> コンボボックスでEnterを押せば次のコンボボックスに移動させ
> るのようにしようとしたところ、移動はするのですが、移動元の
> コンボボックスの文字列が選択状態になったままになってしまい
> ます。 これはどのようにすれば回避できるのでしょうか?
> 以下に簡単なソースを掲載します。
> Private Sub Cmb1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Cmb1.KeyDown
> If e.KeyCode = Keys.Return Then
> Cmb2.Focus()
> End If
> End Sub
>
> VB6.0ではこのようにはならなかったと思うのですが
> よろしくお願い致します。
>
> こう

[Enter]キーを押下した直後にフォーカス遷移するとそうなるようです。
フォーカス遷移した後に、[Enter]キーを押されなかったようにすればよいです。
(というより、KeyDownイベントは終了したってことにする)

  If e.KeyCode = Keys.Enter Then
    Combobox2.Focus()
    e.Handled = True
  End If

# 全部のKeyDownイベントにこんな実装をするのは面倒なので、
# ProceessDialogKeyをオーバーライドして、Tabに置き換えた方が楽ですよ。
# または、FormのKeyDownイベントで実装しましょう。
こうさん、こんにちわ。

素のフォームにコンボボックスを2つ置いて、
こうさんのコードをまま貼り付けたら、
移動元のコンボボックスの文字列は選択状態が解除されました。

なにか他の処理で選択状態にしているのでは??
または、なにか特別な条件があるのかも知れませんね。
■No5827に返信(SHさんの記事)
> こうさん、こんにちわ。
>
> 素のフォームにコンボボックスを2つ置いて、
> こうさんのコードをまま貼り付けたら、
> 移動元のコンボボックスの文字列は選択状態が解除されました。
>
> なにか他の処理で選択状態にしているのでは??
> または、なにか特別な条件があるのかも知れませんね。

そうかもしれませんね。ちなみに私の環境では、

  If e.KeyCode = Keys.Enter Then
    Combobox2.Focus()
  End If

だと、こうさんと同じく選択状態のままになる現象が起き、

  If e.KeyCode = Keys.Enter Then
    Combobox2.Focus()
    e.Handled = True
  End If

だと、起きなくなりました。
SHさん java.lang.Nullpo さんどうもありがとうございました。
java.lang.Nullpo さんのおっしゃる通りのコーディングをした
ところ解決しました。

でも環境によっては違う動きをするということもとても勉強になり
ました。 SHさんありがとうございます。

java.lang.Nullpo さんとペガラボさんとの熱いトークを昨日よま
せていただきました。 お二人ともすごいのでびっくりしましたよ。(><)
尊敬するお二人のことがわかってよかったです。
また今後ともよろしくお願いします。

こう
解決済み!
SHさん、こうさん、こんにちわ。

■No5830に返信(こうさんの記事)
> でも環境によっては違う動きをするということもとても勉強になり
> ました。 SHさんありがとうございます。

実は、私はココが知りたいのです。
[Enter]キーはWindowsの仕様的には「フォーカス遷移」ではないです。
Windowsにおける「フォーカス遷移」は[Tab]キーです。
実際、ComboBoxの時、[Enter]キーではなく[Tab]キーでやると、
今回の現象は発生しませんので...

# .NETでは環境による違いは考えにくいかもしれません。
# Javaほどではないですが、マルチプラットフォーム(Win限定の話w)に対応してるし...


> java.lang.Nullpo さんとペガラボさんとの熱いトークを昨日よま
> せていただきました。 お二人ともすごいのでびっくりしましたよ。(><)
> 尊敬するお二人のことがわかってよかったです。
> また今後ともよろしくお願いします。

ありがとうございます。しかし、私は全然すごくありません。
私なんかより、このサイトの管理者さまや、ぺがらぼさん、SHさんの方が...。

# よろしければ、「こう」さんも熱いトークをしませんか? (^^;
解決済み!
■No5831に返信(java.lang.Nullpoさんの記事)
> # よろしければ、「こう」さんも熱いトークをしませんか? (^^;

僕もぺがらぼさんの掲示板にたまに書き込むのでそちらでまた
熱いトークを聞かせてください。 楽しみにしてますねー。

こう
■No5838に返信(こうさんの記事)
> ■No5831に返信(java.lang.Nullpoさんの記事)
>># よろしければ、「こう」さんも熱いトークをしませんか? (^^;
>
> 僕もぺがらぼさんの掲示板にたまに書き込むのでそちらでまた
> 熱いトークを聞かせてください。 楽しみにしてますねー。
>
> こう
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板