Eine ComboBox, in der nach den enthaltenen Einträgen gesucht werden kann.
Es können keine neuen Einträge eingefügt werden und nur Begriffe eingegeben werden, die auch in der Liste enthalten sind.
GFU-Schulungen [Anzeige]
C# 2017/2015/2013 GrundlagenNach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen und bauen Trouble Shooting ein.
C# GrundlagenDie Schulung vermittelt Ihnen die Grundlagen von C#
in der Arbeit mit Datentypen sowie bei Klassenbibliotheken. Sie lernen, mit Variablen umzugehen und deren verschiedene Formen zu konvertieren.
using System;
using System.Windows.Forms;
namespace MyUserControls
{
/// <summary>
/// ComboBox, die es ermöglicht, die darin enthaltenen
/// Einträge zu suchen, jedoch keine neuen anzulegen.
/// </summary>
public class SearchableComboBox : ComboBox
{
/// <summary>
/// Initialisiert eine durchsuchbare ComboBox.
/// </summary>
public SearchableComboBox()
{
// Autovervollständigung einschalten
this.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
this.AutoCompleteSource = AutoCompleteSource.ListItems;
// Einfügen von Text mittels Kontextmenüs verhindern
this.ContextMenu = new ContextMenu();
// Einzelne Tastendrücke abfangen
this.KeyPress += new KeyPressEventHandler(SearchableComboBox_KeyPress);
}
/// <summary>
/// Wird aufgerufen, wenn eine Taste gedrückt wird.
/// Überprüft, ob es sich um eine gültige Taste handelt.
/// </summary>
private void SearchableComboBox_KeyPress(object sender, KeyPressEventArgs e)
{
// Bei der Löschtaste die Methode verlassen
if (e.KeyChar == '\b')
return;
string searchString = String.Concat(this.SelectedText != "" ? this.Text.Replace(this.SelectedText, "") : this.Text,
e.KeyChar.ToString());
bool success = false;
// Alle Einträge überprüfen, ob ein passender gefunden werden kann
foreach (object item in this.Items)
{
if (item.ToString().StartsWith(searchString))
{
success = true;
break;
}
}
// Wenn es nicht erfolgreich war, den Tastendruck verhindern
if (!success)
e.Handled = true;
}
/// <summary>
/// Verhindert das Einfügen von Text mithilfe von Strg + V.
/// </summary>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Control | Keys.V))
return true;
else
return base.ProcessCmdKey(ref msg, keyData);
}
}
}
7 Kommentare zum Snippet