Moin,
ich brauche mal Hilfe bei der Umsetzung. Ich hoffe es richtig erklären zu können was ich vorhabe.
1. TextBox => hier wird ein Suchbegriff eingegeben
2. ComboBox => hier werden die Ergebnisse Ausgegeben
Hier mal ein Beispiel wie das in etwas aussieht
Erklärung:
Es wird ein Text eingeben und bei jeden Tastendruck wird die "Datenbank" durchsucht mit Hilfe von RegEx. Sobald er ein Treffer hat, Packt er das Objekt "Customer" in die ComboBox.
ToString() habe ich überschrieben damit in der ComboBox auch was sinniges steht. Wenn man nun etwas aus der ComboBox auswählt, kann ich das Objekt wieder Casten und damit weiter Arbeiten.
Mein Problem:
Es wird immer "Vorname + Nachname" ausgegeben. Wenn ich z.b. "Beisp" in die Textbox eingebe, finde er alles wo diese Zeichenfolge vorkommt.
Beim "Mustermann" fängt der Ort mit "Beisp" auch an, es wird dann aber auch nur "Vorname + Nachname" ausgeben.
Ich würde aber gerne, je nachdem wo der Treffer ist, die ToString() Ausgabe anpassen.
TextBox Eingabe = "Beisp"
Ergebnis in der ComboBox soll so aussehen:
- Max Müller (Beispielstr. 1)
- Mustermann Meyer (Beispielstadt)
- Beispiel Schultz
ich brauche mal Hilfe bei der Umsetzung. Ich hoffe es richtig erklären zu können was ich vorhabe.
1. TextBox => hier wird ein Suchbegriff eingegeben
2. ComboBox => hier werden die Ergebnisse Ausgegeben
Hier mal ein Beispiel wie das in etwas aussieht
C#-Quellcode
-
- using System.Collections.Generic;
- using System.Linq;
- using System.Text.RegularExpressions;
- using System.Windows.Forms;
- namespace Beispiel
- {
- public partial class Form1 : Form
- {
- Database database = new Database();
- public Form1()
- {
- InitializeComponent();
- comboBox1.Items.AddRange(database.GetCustomers().ToArray());
- textBox1.KeyDown += TextBox1_KeyDown;
- }
- private void TextBox1_KeyDown(object sender, KeyEventArgs e)
- {
- comboBox1.Items.Clear();
- comboBox1.Items.AddRange(database.GetCustomers().Where(arg => Regex.IsMatch(arg.Firstname, textBox1.Text, RegexOptions.IgnoreCase)).ToArray());
- comboBox1.Items.AddRange(database.GetCustomers().Where(arg => Regex.IsMatch(arg.Lastname, textBox1.Text, RegexOptions.IgnoreCase)).ToArray());
- comboBox1.Items.AddRange(database.GetCustomers().Where(arg => Regex.IsMatch(arg.Street, textBox1.Text, RegexOptions.IgnoreCase)).ToArray());
- comboBox1.Items.AddRange(database.GetCustomers().Where(arg => Regex.IsMatch(arg.Location, textBox1.Text, RegexOptions.IgnoreCase)).ToArray());
- }
- }
- public class Database
- {
- List<Customer> customers;
- public Database()
- {
- customers = new List<Customer>()
- {
- new Customer() { Firstname = "Max", Lastname = "Müller", Street = "Beispielstr. 1", Location = "Local eben" },
- new Customer() { Firstname = "Mustermann", Lastname = "Meyer", Street = "Musterstrasse 5", Location = "Beispielstadt" },
- new Customer() { Firstname = "Beispiel", Lastname = "Schultz", Street = "Irgendwo 11", Location = "Erde" }
- };
- }
- public IEnumerable<Customer> GetCustomers()
- {
- foreach (var customer in customers)
- {
- yield return customer;
- }
- }
- }
- public class Customer
- {
- private string firstname = "";
- public string Firstname
- {
- get { return firstname; }
- set { firstname = value; }
- }
- private string lastname = "";
- public string Lastname
- {
- get { return lastname; }
- set { lastname = value; }
- }
- private string street = "";
- public string Street
- {
- get { return street; }
- set { street = value; }
- }
- private string location = "";
- public string Location
- {
- get { return location; }
- set { location = value; }
- }
- public override string ToString()
- {
- return firstname + " " + lastname;
- }
- }
- }
Erklärung:
Es wird ein Text eingeben und bei jeden Tastendruck wird die "Datenbank" durchsucht mit Hilfe von RegEx. Sobald er ein Treffer hat, Packt er das Objekt "Customer" in die ComboBox.
ToString() habe ich überschrieben damit in der ComboBox auch was sinniges steht. Wenn man nun etwas aus der ComboBox auswählt, kann ich das Objekt wieder Casten und damit weiter Arbeiten.
Mein Problem:
Es wird immer "Vorname + Nachname" ausgegeben. Wenn ich z.b. "Beisp" in die Textbox eingebe, finde er alles wo diese Zeichenfolge vorkommt.
Beim "Mustermann" fängt der Ort mit "Beisp" auch an, es wird dann aber auch nur "Vorname + Nachname" ausgeben.
Ich würde aber gerne, je nachdem wo der Treffer ist, die ToString() Ausgabe anpassen.
TextBox Eingabe = "Beisp"
Ergebnis in der ComboBox soll so aussehen:
- Max Müller (Beispielstr. 1)
- Mustermann Meyer (Beispielstadt)
- Beispiel Schultz