- PR -

ユーザーコンボボックスでドロップダウンを表示させるとカーソルが消える

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2006-05-30 13:44
ご教授よろしくお願いいたします。

Windowsアプリ
VB.NET2003

コンボボックスを継承してオートコンプリート可能なユーザーコントロールを作成しました。
コンボボックスのKeyUpでドロップダウンリストを表示させるのですが、そのときカーソルが消えてしまいます。
マウスでドロップダウンリストを表示させた後に、テキストを入力するとカーソルは消えません。

カーソルはなぜ消えてしまうのでしょうか?

Public Sub UserComboBox_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles MyBase.KeyUp
Dim sInputText As String
Dim iFoundIndex As Integer
Dim oFoundItem As Object
Dim sFoundText As String
Dim sAppendText As String

'矢印キー、BackSpace、Deleteは処理しない
Select Case e.KeyCode
Case Keys.Left, Keys.Right, Keys.Up, Keys.Down, Keys.Back, Keys.Delete
Return
End Select

'入力された文字をリストより検索する
sInputText = MyBase.Text
iFoundIndex = MyBase.FindString(sInputText)

'検索結果あり
If iFoundIndex >= 0 Then

'リストからItemを取得する
oFoundItem = MyBase.Items(iFoundIndex)

'Itemに対応するデータを取得する
sFoundText = MyBase.GetItemText(oFoundItem)

'テキストを補足する
sAppendText = sFoundText.Substring(sInputText.Length)
MyBase.Text = sInputText & sAppendText

'テキストを選択する
MyBase.Select(sInputText.Length, sAppendText.Length)

'ドロップダウンリストを表示する
MyBase.DroppedDown = True

End If

End Sub


Public Sub AutoCompleteCombo_Leave(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles MyBase.Leave
Dim iFoundIndex As Integer

iFoundIndex = MyBase.FindStringExact(MyBase.Text)

MyBase.SelectedIndex = iFoundIndex

End Sub
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-30 14:29
引用:

未記入さんの書き込み (2006-05-30 13:44) より:

コンボボックスを継承してオートコンプリート可能なユーザーコントロールを作成しました。
コンボボックスのKeyUpでドロップダウンリストを表示させるのですが、そのときカーソルが消えてしまいます。
マウスでドロップダウンリストを表示させた後に、テキストを入力するとカーソルは消えません。


ユーザーコントロールでない ComboBox + 以下のミニマム コードで十分確認できました。

コード:

    Private Sub ComboBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyUp
        Me.ComboBox1.DroppedDown = True
    End Sub


ついでに、KeyDown、KeyPress イベントでも試してみたところ、
マウス ポインタは消えはしないものの、マウス ポインタの形状がそのままになりますね。
(たとえば、ComboBox の入力領域にポイントしている場合は、I ビーム形状のままになります)

どうやら、ドロップダウンされた時から、制御が奪われっぱなしのような状態です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2006-05-31 10:13
じゃんぬさん
返答ありがとうございます。

じゃんぬさんの書かれているとおりでした。
KeyPressで処理をしてマウスカーソルはビーム形状のままで対応しました。

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

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