| まずは魔界の仮面弁士さま、 WebSurferさま、
お付き合いいただいてどうもありがとうございました。
お二人からご紹介のあったサイトはゆっくり読んで勉強させていただきます。
やはりVB.NETで「コンボボックスによる絞り込み」は出来ないか、
少なくとも「途方もなく難しい」ということが分かりました。
ウエブを探しても記事がないというのがその何よりの証拠だと思います。
>> 絞り込むタイミングとしてはComboBox2のMouseDownイベントがいいのではないかと。
>MouseDown が発生するとは限りませんので、それを前提として
>設計するのは避けたほうが良いでしょう。
>たとえば、Tab キーによってフォーカス移動してくることもありますよね。
>ComboBox がアクティブになっている状態から、
>ドロップダウンさせないまま、上下矢印キーで項目が変更されたり、
>アイテム名の頭文字を入力して候補を選択したり、
>[F4] キーあるいは、[Alt]+[下]キーでドロップダウンされることもあります。
なるほど。ドロップダウンボタンがあれば、普通の人ならば必ず押すものだと思っていましたが、
確かに上級者の場合、マウスなしでTabKeyを使うことが多いかも知れませんね。
となるとやはりComboBox2_Enterイベントでしょうかね?
最後に「次善の策」として考えていたDataGridViewを使うのが手っ取り早いと理解いたしました。
拙作のコードを書いて、お二人へのお礼とさせていただきたいと思います。
フォームにTabPageを2つ作り1ページ目に部署コードComboBox、.部署名TextBox、社員コードComboBox、
社員名TextBoxを置きます。
2ページ目にStd_社員DataGridViewとTbl_部署DataGridViewを置いて、
それぞれにToolStripを付けました。以下がそのコードです。
Public Class 社員情報
Private Sub 社員情報_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Tbl_部署TableAdapter.Fill(Me.ComboBoxSampleDataSet.tbl_部署)
Me.Qry_社員TableAdapter.Fill(Me.ComboBoxSampleDataSet.qry_社員)
Me.部署コードComboBox.Text = ""
Me.部署名TextBox.Text = ""
Me.社員コードComboBox.Text = ""
Me.社員名TextBox.Text = ""
End Sub
Private Sub 部署コードComboBox_TextChanged(sender As Object, e As EventArgs) Handles 部署コードComboBox.TextChanged
部署コードToolStripTextBox.Text = Me.部署コードComboBox.Text
Try
Me.Std_社員TableAdapter.Fill(Me.ComboBoxSampleDataSet.std_社員, New System.Nullable(Of Integer)(CType(社員コードToolStripTextBox.Text, Integer)))
Catch ex As System.Exception
End Try
End Sub
Private Sub 社員コードComboBox_Enter(sender As Object, e As EventArgs) Handles 社員コードComboBox.Enter
If Me.部署コードComboBox.Text = "" Then
Me.社員名TextBox.Text = ""
MsgBox("部門コードを入力してください。")
Me.部署コードComboBox.Select()
Else
Me.TabPage.SelectedIndex = 1
Me.Std_社員DataGridView.Visible = True
End If
End Sub
'***********************************************************************************************
'タブインデックスを選択したときのイベント
'***********************************************************************************************
Private Sub TabTest_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabPage.SelectedIndexChanged
Select Case Me.TabPage.SelectedIndex'タブを選択した時のイベント
Case 0
Case 1
If Me.部署コードComboBox.Text = "" Then
Me.Std_社員DataGridView.Visible = False
Me.社員コードToolStripTextBox.Text = Me.社員コードComboBox.Text
Me.社員名ToolStripTextBox.Text = Me.社員名TextBox.Text
Else
Me.Std_社員DataGridView.Visible = True
Try
Me.Std_社員TableAdapter.Fill(Me.ComboBoxSampleDataSet.std_社員, New System.Nullable(Of Integer)(CType(部署コードToolStripTextBox.Text, Integer)))
Catch ex As System.Exception
'System.Windows.Forms.MessageBox.Show(ex.Message)'メッセージは出さない
End Try
End If
If Me.社員コードComboBox.Text = "" Then
Me.Std_社員DataGridView.Visible = False
End If
Me.部署コードToolStripTextBox.Text = Me.部署コードComboBox.Text
Me.部署名ToolStripTextBox.Text = Me.部署名TextBox.Text
Me.社員コードToolStripTextBox.Text = Me.社員コードComboBox.Text
Me.社員名ToolStripTextBox.Text = Me.社員名TextBox.Text
Case 2
End Select
End Sub
Private Sub Std_社員DataGridView_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles Std_社員DataGridView.CellDoubleClick
Dim r As DataGridViewRow = Me.Std_社員DataGridView.CurrentRow
Me.社員コードComboBox.Text = r.Cells("DataGridViewTextBoxColumn8").Value
MsgBox("入力しました。")
Me.TabPage.SelectedIndex = 0
End Sub
Private Sub クリアButton_Click(sender As Object, e As EventArgs) Handles クリアButton.Click
Me.部署コードComboBox.Text = ""
Me.部署名TextBox.Text = ""
Me.社員コードComboBox.Text = ""
Me.社員名TextBox.Text = ""
End Sub
End Class
|