インクリメンタルサーチを使用して列のエントリを検索するには、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」が強調表示されます。