Autor Beitrag
DevInet
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win XP, Win 7 Prof., Linux Mandriva
C#(VS 2010), Java, php
BeitragVerfasst: Do 02.09.10 08:52 
Hallo zusammen.

Ich arbeite momentan an einem Programm zu dem die Pflege einer Mitarbeiter-Liste, über ein UI, gehört.
Das ganze schaut wie folgt aus.

Die MitarbeiterListe wird in eine ListBox geladen. Dort soll, um Einträge zu löschen, der entsprechende Eintrag ausgewählt werden und dann über ein Button gelöscht werden. Der "SelectionMode" ist auf "MultiExtended" gestellt. Wenn man nur einen Eintrag auswählt, funktioniert das ganze ohne Probleme. Wählt man aber mehrere Einträge aus, werden alle Einträge bis auf einen gelöscht, oder auch die ganze Liste.

Hier mein Code
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
int zNr = lstBox1.SelectedIndex;
            string miAlt = lstBox1.Items[zNr].ToString();
            StreamWriter schleife = new StreamWriter(@"T:\transfer\hes\templates\mitarbeiter3.csv"true, System.Text.Encoding.UTF7);
            System.Collections.IEnumerator entryItr = lstBox1.Items.GetEnumerator();
            while (entryItr.MoveNext())
                while (entryItr.MoveNext())
                {
                    string entry = entryItr.Current.ToString();
                    if (entry != miAlt)
                    {
                        schleife.WriteLine(entry, System.Text.Encoding.UTF7);
                    }
                    else
                    {
                        continue;
                    }
                }
            schleife.Close();


Vielen Dank schonmal im vorraus.

Mfg
DevInet
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 02.09.10 09:54 
Hallo,

wieso hast du zweimal while(entryItr.MoveNext()) ?

Da überspringt er den Ersten...

Gruß
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 02.09.10 10:12 
Außerdem kann man die Schleife eleganter programmieren:
ausblenden C#-Quelltext
1:
foreach(string entry in lstBox1.Items)					


P.S. UTF7 ist nun wirklich eine der ungebräuchlichsten Encodings, s.a. de.wikipedia.org/wiki/UTF-7 - Nimm lieber UTF8 bzw. Default.
Und einen StreamWriter "schleife" zu nennen, ist auch etwas verwirrend -)

Außerdem solltest du mal den Begriff "DataBinding" nachschlagen, d.h. die Trennung von GUI und Daten, so daß deine Methoden nur noch auf den Daten arbeiten und nicht mehr direkt mit den GUI-Steuerelementen (Für die Anbindung an die ListBox gehören dazu die Eigenschaften "DisplayMember", "ValueMember" sowie "DataSource).
Necaremus
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 203
Erhaltene Danke: 18

Win > XP, Vista, 7; Android 2.1
C# > VS '08,'10; Delphi7
BeitragVerfasst: Fr 03.09.10 10:12 
was ich auch etwas komisch finde ist die else {continue;} anweisung zum schluss der schleife - die ist eigentlich komplett überflüssig, oder überseh ich etwas?

ich würde empfehlen mit nem DataGridView zu arbeiten, da das control wesentlich mächtiger ist.
du könntest auch nen ListView-Control nehmen und da die checkbox eigenschaft auf true setzen, sodass man einfach die items auswählen kann - wäre evtl auch eleganter :)
CSMN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43
Erhaltene Danke: 2



BeitragVerfasst: Fr 03.09.10 12:33 
Nicht dass ich den bisherigen Antworten nicht recht gebe, aber das eigentlich Problem ist dass
wenn du mehrere Einträge löschen möchtest auch die entspechenden Indizes liefern musst. Du lieferst
aber nur einen einzigen Index (Quelltext Zeile 1). Entweder erweiterst du das Codefragmet in Zeile 9 ff
um eine Schleife die alle gelöschten Mitarbeiter umfasst oder du baust vor dem Speichern eine
Methode die die Zeilen aus der listbox mit listBox1.Items.RemoveAt(); löscht.
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Sa 04.09.10 09:55 
Hallo,

ich verstehe das ganze eigentlich so, als ob die Einträge gar nicht in der ListBox (oder wo auch immer) gelöscht werden sollen, sondern, dass ausgewählte Einträge nur nicht in der Datei landen sollen.
Mehr geht aus dem Code eigentlich nicht hervor. Obwohl es auch komisch ist.

Un abzufragen, welche Einträge abgefragt wurden, hat eine ListBox die Eigenschaft "SelectedIndices". Diese liefert eine Collection aller ausgewählter Indexe zurück.

kurzes Anwendungsbeispiel:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
for (int i = 0; i < listBox1.Items.Count; i++)
{
  if (!listBox1.SelectedIndices.Contains(i))
  {
    //Eintrag wurde nicht ausgewählt
    //tu was mit dem Eintrag 
  }
}


Muss aber @Necaremus Recht damit geben, dass ein anderes Steuerelement zur Anzeige vielleicht wirklich besser wäre. Denn du hast ja besimmt von einem Mitarbeiter mehrere Daten, nicht nur den Namen.

LG, MArko