- PR -

コンボボックスでインクリメンタルサーチは可能?

1
投稿者投稿内容
maru
常連さん
会議室デビュー日: 2001/10/09
投稿数: 23
投稿日時: 2003-05-12 15:30
Windowsフォームにおいて
コンボボックスでインクリメンタルサーチを利かせる方法はありますでしょうか?

DropDownListコンボボックスかつSortをTrue
にすることで入力値一文字目が一致するものが表示されますが
インクリメンタルサーチにはなりませんでした。

よろしくお願いします

[ メッセージ編集済み 編集者: maru 編集日時 2003-05-12 15:39 ]
maru
常連さん
会議室デビュー日: 2001/10/09
投稿数: 23
投稿日時: 2003-05-12 17:25
わかりましたので報告!
こんな感じでできました。
----------------------

Public Class ComboBoxEx
Inherits System.Windows.Forms.ComboBox

#Region " コンポーネント デザイナで生成されたコード "

Public Sub New(Container As System.ComponentModel.IContainer)
MyClass.New()

'Windows.Forms クラス作成デザイナのサポートに必要です。
Container.Add(me)
End Sub

Public Sub New()
MyBase.New()

' この呼び出しは、コンポーネント デザイナで必要です。
InitializeComponent()

' InitializeComponent() 呼び出しの後に初期化を追加します。

End Sub

'Component は、コンポーネント一覧に後処理を実行するために dispose をオーバーライドします。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

' コンポーネント デザイナで必要です。
Private components As System.ComponentModel.IContainer

' メモ : 以下のプロシージャはコンポーネント デザイナで必要です。
' コンポーネント デザイナを使って変更してください。
' コード エディタは使用しないでください。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
End Sub

#End Region

Private buf As String
Private startTime As DateTime

Const NOT_FOUND As Integer = -1 'コンボボックスに該当データ無し
Const WAIT_TIME As Integer = 1 '入力待ち時間

Private Sub ComboBoxEx_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
Dim nowTime As Date = DateTime.Now '現在時刻取得

'入力待ち時間中の入力かチェック
If nowTime.CompareTo(startTime.AddSeconds(WAIT_TIME)) > 0 Then
buf = e.KeyChar
Else
buf &= e.KeyChar

'リストから該当データがあるかを検索
Dim i As Integer = Me.FindString(buf)
If i <> NOT_FOUND Then
Me.SelectedIndex = i
End If
End If

startTime = nowTime '入力時間の延長
End Sub

End Class
1

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