インクリメンタルサーチを使用して列のエントリを検索するには、Timer コンポーネントをフォームに追加し、KeyPressおよびTickイベントを設定します。

デザイナの場合
プロパティウィンドウで Timer1のInterval プロパティを見つけ、これを 1000 に設定します。
コードの場合
Form_Loadイベントに次のコードを追加します。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Me.Timer1.Interval = 1000 |
|
C#コードの書き方
| C# |
コードのコピー
|
|---|---|
this.timer1.Interval = 1000; |
|
フォームレベルで検索文字列の変数を宣言します。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Dim searchString As String = String.Empty |
|
C#コードの書き方
| C# |
コードのコピー
|
|---|---|
string searchString = string.Empty; |
|
KeyPressイベントを追加します。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Private Sub C1TrueDBGrid1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles C1TrueDBGrid1.KeyPress
' キーストロークを処理します。
e.Handled = True
Me.searchString += e.KeyChar
Dim count As Integer = Me.C1TrueDBGrid1.Splits(0).Rows.Count
Dim start As Integer = Me.C1TrueDBGrid1.Row
Dim current As Integer = (start + 1) Mod count
' 検索が開始位置に戻ったら停止します。
While current <> start
' 値を取得します。
Dim s As String = Me.C1TrueDBGrid1(current, Me.C1TrueDBGrid1.Col).ToString()
' 一致が見つかったら、終了します。
If s.Substring(0, Me.searchString.Length).ToUpper() = Me.searchString.ToUpper() Then
Exit While
End If
' 次の行を検索し、必要に応じて列を折り返します。
current = (current + 1) Mod count
End While
'グリッドの現在行を更新します。
Me.C1TrueDBGrid1.Row = current
' エントリを強調表示します。
Me.C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightCell
' 検索文字列を 1 秒でクリアします。
Me.Timer1.Enabled = True
End Sub
|
|
C#コードの書き方
| C# |
コードのコピー
|
|---|---|
private void c1TrueDBGrid1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
// キーストロークを処理します。
e.Handled = true;
this.searchString += e.KeyChar;
int count = this.c1TrueDBGrid1.Splits[0].Rows.Count;
int start = this.c1TrueDBGrid1.Row;
int current = (start + 1) % count;
//検索が開始位置に戻ったら停止します。
while( current != start )
{
// 値を取得します。
string s = this.c1TrueDBGrid1[current, this.c1TrueDBGrid1.Col].ToString();
// 一致が見つかったら、終了します。
if( s.Substring(0, this.searchString.Length).ToUpper() == this.searchString.ToUpper() )
break;
// 次の行を検索し、必要に応じて列を折り返します。
current = (current + 1) % count;
}
// グリッドの現在行を更新します。
this.c1TrueDBGrid1.Row = current;
// エントリを強調表示します。
this.c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightCell;
// 検索文字列を 1 秒でクリアします。
this.timer1.Enabled = true;
}
|
|
タイマーに Tickイベントを追加します。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.searchString = String.Empty
Me.Timer1.Enabled = False
End Sub
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
private void timer1_Tick(object sender, System.EventArgs e)
{
this.searchString = string.Empty;
this.timer1.Enabled = false;
}
|
|
このトピックの作業結果ユーザーが入力を行うと、その文字を含むセルが検索されて強調表示されます。この例では、Last 列で「V」を入力すると、「Varese」が強調表示されます。
同じ文字で始まるエントリが複数ある場合は、次の文字を入力すると、それらの文字を含むエントリが強調表示されます。たとえば、Last 列で「Viv」を入力すると、「Vivaldi」が強調表示されます。