windowsforms-devexpress-dot-xtraeditors-dot-baselistboxcontrol-f6a60489.md
Fires when a related SearchControl fires a query to the current List Box. Allows you to create a filter condition based on the query and specify how to highlight results in the control.
Namespace : DevExpress.XtraEditors
Assembly : DevExpress.XtraEditors.v25.2.dll
NuGet Package : DevExpress.Win.Navigation
[DXCategory("Data")]
public event EventHandler<ParseSearchControlTextEventArgs> ParseSearchControlText
<DXCategory("Data")>
Public Event ParseSearchControlText As EventHandler(Of ParseSearchControlTextEventArgs)
The ParseSearchControlText event's data class is DevExpress.XtraEditors.ParseSearchControlTextEventArgs.
The SearchControlText event argument returns the query in the search control. Based on the query, you can create a CriteriaOperator object that specifies a filter condition. To apply the condition to the control, use the SetFindCriteriaAndHighlight method.
The code below shows how to use a comma to split the search query into several queries.
using DevExpress.Data;
using DevExpress.Data.Filtering;
private void listBoxControl1_ParseSearchControlText(
object sender, DevExpress.XtraEditors.ParseSearchControlTextEventArgs e) {
if(string.IsNullOrWhiteSpace(e.SearchControlText))
return;
List<string> criteria = new List<string>();
foreach(string criteriaString in e.SearchControlText.Split(new[] { ',' },
StringSplitOptions.RemoveEmptyEntries)) {
string str = criteriaString;
if(criteriaString[0] == ' ')
str = criteriaString.Remove(0, 1);
criteria.Add(str);
}
if(criteria.Count < 2)
return;
string filterString = String.Empty;
for(int i = 0; i < criteria.Count; i++) {
filterString += "Contains([LastName], '" + criteria[i] + "')";
if(i != criteria.Count - 1)
filterString += " OR ";
}
CriteriaOperator _findCriteria = CriteriaOperator.Parse(filterString);
e.SetFindCriteriaAndHighlight(_findCriteria,
(x) => {
var arr = new DisplayTextHighlightRange[criteria.Count()];
for(int i = 0; i < criteria.Count(); i++) {
arr[i] = new DisplayTextHighlightRange(x.IndexOf(criteria[i]), criteria[i].Length);
}
return arr;
});
e.Handled = true;
}
Option Infer On
Imports DevExpress.Data
Imports DevExpress.Data.Filtering
Private Sub listBoxControl1_ParseSearchControlText(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.ParseSearchControlTextEventArgs)
If String.IsNullOrWhiteSpace(e.SearchControlText) Then
Return
End If
Dim criteria As New List(Of String)()
For Each criteriaString As String In e.SearchControlText.Split( { ","c }, StringSplitOptions.RemoveEmptyEntries)
Dim str As String = criteriaString
If criteriaString.Chars(0) = " "c Then
str = criteriaString.Remove(0, 1)
End If
criteria.Add(str)
Next criteriaString
If criteria.Count < 2 Then
Return
End If
Dim filterString As String = String.Empty
For i As Integer = 0 To criteria.Count - 1
filterString &= "Contains([LastName], '" & criteria(i) & "')"
If i <> criteria.Count - 1 Then
filterString &= " OR "
End If
Next i
Dim _findCriteria As CriteriaOperator = CriteriaOperator.Parse(filterString)
e.SetFindCriteriaAndHighlight(_findCriteria, Function(x)
Dim arr As DisplayTextHighlightRange = New DisplayTextHighlightRange(criteria.Count() - 1){}
For i As Integer = 0 To criteria.Count() - 1
arr(i) = New DisplayTextHighlightRange(x.IndexOf(criteria(i)), criteria(i).Length)
Next i
Return arr
End Function)
e.Handled = True
End Sub
See Also