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

F3を割り当てられたコンボがF4でロストフォーカスした時にリストが展開してしまう。

環境/言語:[WindowsXPPro、VB.NET2003]
分類:[.NET]

失礼致します。ご質問させてください。

frmTest(Form)に、TextBox1(TextBox)、ComboBox1(ComboBox)、btnF3(Button)、btnF4(Button)という4つのコントロールを配置しています。
frmTestのKeyPreviewはTrueにしています。ComboBox1のDropDownStyleは、
DropDownListです。TextBox1のTabIndexは2、ComboBox1のTabIndexは3です。
ComboBox1には、Microsoft AccessのMDBのテーブル「TEST」から、フィールド「A」をValueMember、フィールド「B」をDisplayMemberとして取得しています。

実現したい動きは、
・F3を押した時に、ComboBox1にフォーカス。リストは開かず。TextBox1は空へ。
・F4を押した時に、TextBox1にフォーカス。ComboBox1のリストは開かず。
というものです。

以下のコードを実行すると、F3を押しても、F4を押しても、
ComboBox1のリストは開きませんが、唯一、F3を押した直後にF4を押すと、
リストが開いてしまいます。ここでリストが開かないようにしたいと思っています。TextBox1にF4ではなくF5を割り当てると、この現象は起きません。

コードの各所に、ComboBox1.DroppedDown=Falseを記述しても、
解決しませんでした。この現象の解決に、何かよい方策がございましたら、
ご教示頂きたく、よろしくお願い致します。

Imports System.Data.OleDb

Public Class frmTest
Inherits System.Windows.Forms.Form

Private Sub frmTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  btnF3.Tag = 3
  btnF4.Tag = 4
  ComboBox1_GetList()
Private Sub frmTest_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
  If e.KeyCode = Keys.F3 Then
    btnF3.PerformClick()
  ElseIf e.KeyCode = Keys.F4 Then
    btnF4.PerformClick()
  End If
Private Sub MenuButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnF3.Click, btnF4.Click
  Select Case sender.Tag
    Case 3
      TextBox1.Text=""
      ComboBox1.SelectedIndex = 0
      ComboBox1.Focus()
      ComboBox1.SelectAll()
    Case 4
'「ComboBox1.Text = ComboBox1.Items(0)」はエラーになる。
      ComboBox1.SelectedIndex = 0
      TextBox1.Focus()
      TextBox1.SelectAll()
  End Select
Private Sub ComboBox1_GetList()
  Dim Cn As New OleDbConnection("(接続文字列)")
  Dim strSQL As String = "select[A],[B] from [TEST] ORDER BY [A]"
  Dim cmd As New OleDbCommand(strSQL, Cn)
  Dim da As New OleDbDataAdapter
  Dim ds As New DataSet

  Try
    cmd.Connection = Cn
    cmd.CommandText = strSQL
    da.SelectCommand = cmd
    ds.Clear()
    da.Fill(ds, "B")
    ComboBox1.DataSource = ds.Tables("B")
    ComboBox1.DisplayMember = "B"
    ComboBox1.ValueMember = "A"
   Catch

  Finally
    ComboBox1.SelectedIndex = 0
  End Try
    End Sub
End Class
失礼致します。上記の文章で、
「ComboBox1のTabIndexが2、TextBox1のTabIndexが3」の誤りでした。
色々方法はあると思いますが
コンボボックスのキーダウンイベントで
If e.KeyCode = Keys.F4 Then
e.Handled = True
End If
これでF4を無効にできるのでリスト展開はなくなります。
■No18888に返信(琥珀さんの記事)

琥珀様、ご教示いただきまして、
本当にありがとうございました。
無事に解決することができました。
解決済み!

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