Hallo,
ich würde gerne, wenn ich auf "Refresh" klicke (vorhandene COM Ports) nicht mehrmals den gleichen COM Port in der ListBox sehen, sondern nur wenn ein neuer vorhanden ist. Also es sollen alle bleiben und nur neue hinzukommen. Aber keine doppelten Einträge zulässig sein (hoffe ihr versteht jetzt was ich meine 😛)
Wie mache ich das am besten?
private void button5_Click(object sender, EventArgs e)
{
foreach (string item in System.IO.Ports.SerialPort.GetPortNames())
{
listBox1.Items.Add(item);
}
}
Hi,
wie wäre es, wenn du die Items der ListBox einfach vorher löschst? In etwa so...
private void button5_Click(object sender, EventArgs e)
{
listBox1.Items.Clear(); // Vorhandene Elemente löschen
foreach (string item in System.IO.Ports.SerialPort.GetPortNames())
{
listBox1.Items.Add(item);
}
}
Da die Einträge in der ListBox so immer neu erzeugt werden, muss man sich nicht um doppelte Einträge usw. kümmern.
Oder es richtig lernst, aufhörst die Daten in UI Elemente zu frickeln und es mit DataBinding machst?
Pack dein Strings in eine List<string> und binde diese an die ListBox.
[Artikel] Drei-Schichten-Architektur
Dein Problem ist ansich sicherlich einfach. Da die Kenntnisse über dein Know-How über DataBinding bestimmt nicht ganz klar ist, war es wohl eher ein gut gemeinter Rat. Bevor es zu Gewohnheit wird und man sich selbst Stolpersteine legt.
Sehe ich anders.
Das hat wenig mit "das braucht man mal später" also KISS oder JAGNY zu tun,
sondern das trennen von UI und Logik gehört zu den absoluten Grundlagen.
Im Deklarationsteil
private Bindingsource m_PortBinder = new Bindingsource();
private List<string> m_PortList = new List<string>();
Im Constructor:
InitialiseComponents()
listBox1.DataSource = m_PortBinder;
AddPortList();
...
private void AddPortList()
{
m_PortList = m_PortList.Union( System.IO.Ports.SerialPort.GetPortNames() );
m_PortBinder.DataSource = m_PortList;
}
private void button5_Click(object sender, EventArgs e)
{
AddPortList();
}
Moin FZelle,
wie würdest du deinen Beitrag umformulieren, damit der Anfragende/Themenstarter einen Erkenntnisgewinn bzgl. des Themas " Doppelte Einträge oder schon vorhandener Eintrag löschen / überschreiben" erhält? Inbesondere die Vorteile bei der Verwendung von Techniken wie "DataBinding" wenn es um das konkrete Thema geht?
Könntest du auch den Punkt "Trennung Logik/UI" evtl. ein wenig besser in deinem Beispiel hervorheben (ich kann dort keine wirkliche Trennung erkennen) ? 😉
P.S.
Wenn das ein wenig ironisch rüberkommt, war es kein Versehen. Ich bin neu in diesem Forum und bin ein wenig verwundert, wie schnell einige Themen sich zu "Erziehungsveranstaltungen" wandeln, wo mit Schlagwörtern hantiert wird und die eigentliche Anfrage auf der Strecke bleibt.
Aber, das ist nur mein subjektiver Eindruck, der nicht unbedingt richtig sein muss...bin halt neu hier.
Eigentlich ist recht deutlich zu erkennen, wie die Logik von der Oberfläche getrennt wird:
Wir brauchen das Thema aber nicht vertiefen, denn es ist in [Artikel] Drei-Schichten-Architektur gut beschrieben.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code