![]()
Nix
------------------
using System.ComponentModel;
using System.Windows.Forms;
public class SearchListBox : ListBox
{
private string _searchTerm = "";
[Category("Behavior")]
[Description("Suchbegriff – passende Einträge werden automatisch selektiert")]
public string SearchTerm
{
get => _searchTerm;
set
{
_searchTerm = value;
ApplySearch();
}
}
private void ApplySearch()
{
// Selektion zurücksetzen
SelectedIndex = -1;
if (string.IsNullOrEmpty(_searchTerm))
{
SelectionMode = SelectionMode.One;
return;
}
// Alle Treffer sammeln
var hits = new List<int>();
for (int i = 0; i < Items.Count; i++)
{
if (Items[i].ToString().IndexOf(_searchTerm, StringComparison.OrdinalIgnoreCase) >= 0)
hits.Add(i);
}
if (hits.Count == 0)
{
// Kein Treffer → Single
SelectionMode = SelectionMode.One;
}
else if (hits.Count == 1)
{
// Genau ein Treffer → Single, direkt selektieren
SelectionMode = SelectionMode.One;
SelectedIndex = hits[0];
}
else
{
// Mehrere Treffer → Multi
SelectionMode = SelectionMode.MultiSimple;
foreach (int i in hits)
SetSelected(i, true);
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
// User klickt → zurück auf Single
if (SelectionMode != SelectionMode.One)
{
SelectedIndex = -1;
SelectionMode = SelectionMode.One;
_searchTerm = ""; // intern löschen, kein Property-Event nötig
}
base.OnMouseDown(e);
}
}
------------------