Laden...

Doppelte Einträge oder schon vorhandener Eintrag löschen / überschreiben

Erstellt von Janiiix3 vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.157 Views
J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 8 Jahren
Doppelte Einträge oder schon vorhandener Eintrag löschen / überschreiben

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);
            }
        }

G
17 Beiträge seit 2015
vor 8 Jahren

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.

J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 8 Jahren

Das Leben kann so einfach sein. Perfekt! Danke.

F
10.010 Beiträge seit 2004
vor 8 Jahren

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.

J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 8 Jahren

Was hat das denn für diese einfache Sache für Vorteile?

J
251 Beiträge seit 2012
vor 8 Jahren

[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.

F
10.010 Beiträge seit 2004
vor 8 Jahren

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();
}

G
17 Beiträge seit 2015
vor 8 Jahren

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.

16.842 Beiträge seit 2008
vor 8 Jahren

Eigentlich ist recht deutlich zu erkennen, wie die Logik von der Oberfläche getrennt wird:

  • Die Portnamen werden ausgelesen und über eine Liste zur Verfügung gestellt
  • Die Oberfläche erhält nur die Liste. Wie diese Zustande kommt ist egal.

Wir brauchen das Thema aber nicht vertiefen, denn es ist in [Artikel] Drei-Schichten-Architektur gut beschrieben.