Saheeda Geschrieben 1. August 2014 Geschrieben 1. August 2014 Hallo, ich spiele zurzeit bisschen mit der GUI in C# rum und möchte in einer ListBox mehrere Elemente auswählen und in eine andere ListBox verschieben können. (SelectionMode ist MultiSimple, wenn das wichtig ist...) Mein erster Ansatz: private void btnToRight(object sender, EventArgs e) { foreach (int i in lbLeft.SelectedIndices) { lbRight.Items.Add(lbLeft.Items[i]); lbLeft.Items.Remove(lbLeft.Items[i]); } } Auf diese Art kann ich zwar mehrere Elemente auswählen, es wird aber immer nur eins verschoben, die restlichen bleiben markiert in der Start-ListBox. Deswegen dachte ich, dass mit einer Liste lösen zu können: private void btnToLeft(object sender, EventArgs e) { List<object> picked = new List<object>(); foreach (int i in lbLeft.SelectedIndices) { picked.Add(lbLeft.Items[i]); lbLeft.Items.Remove(lbLeft.Items[i]); } lbRight.Items.AddRange(picked); } Hier bekomme ich schon beim Kompilieren einen Fehler: "Kann nicht von "Generic.List<object>" in "Forms.ListBox.ObjectCollection" konvertieren" Wie kann ich also mehrere Elemente zwischen den ListBoxen hin und herschieben? Danke! Zitieren
Guybrush Threepwood Geschrieben 1. August 2014 Geschrieben 1. August 2014 Hast du dir mal im Debugger angeschaut was in deinem ersten Beispiel genau mit deinen Indices passiert, bzw auf was sie nach den einzelnen Durchläufen zeigen? Dann solltest du den Fehler eigentlich sehr schnell bemerken Zitieren
Saheeda Geschrieben 1. August 2014 Autor Geschrieben 1. August 2014 Hallo Gybrush, danke, mit dem Hinweis hab ichs hinbekommen ^^. private void btnToLeft(object sender, EventArgs e) { foreach(object o in lbLeft.SelectedItems) { int index = lbLeft.Items.IndexOf(o); lbRight.Items.Add(lbLeft.Items[index]); } foreach (object o in lbRight.Items) { if(lbLeft.Items.Contains(o)){ lbLeft.Items.Remove(o); } } Zitieren
Saheeda Geschrieben 2. August 2014 Autor Geschrieben 2. August 2014 Hi, ich hab noch n anderes kleines Problem, möchte dafür aber keinen neuen Thread erstellen. Ich habe eine Klasse Form, in dieser rufe ich über ein Menü das Fenster "NewPersonDialog" auf. In dem Fenster gibt es verschiedene Textboxen, in denen ich z.B. Name, Alter, etc. eingeben möchte. Sobald das Fenster mit OK geschlossen wird, soll die neu erstellte Person gespeichert und in die Liste "Family" eingefügt werden. Problem: Es wird zwar eine neue Person angelegt, aber die Textbox-Werte werden nicht ausgelesen. In meiner Kontrollbox (tbCheck) stehen nur leere Einträge. Ich bekomme keine Fehlermeldung. MainForm: namespace Stammbaum { public partial class MainForm : Form { public Form1() { InitializeComponent(); } private void neuePersonAnlegenToolStripMenuItem_Click(object sender, EventArgs e) { NewPersonDialog form = new NewPersonDialog(); if (form.ShowDialog() == DialogResult.OK) { Person created = new Person(); Person.AddPersonToFamily(created); this.tbCheck.Text = "Surname:" + created.Surname + "\r\n"; this.tbCheck.Text += "Name: " + created.Name; this.tbCheck.Text += Person.FamilyToString(); } } } } Klasse Person: namespace Stammbaum { class Person { private string name; private string surname; private int dateOfBirth; private int dateOfDeath; private string gender; private Person mother; private Person father; private List<Person> siblings = new List<Person>(); private List<Person> children = new List<Person>(); private static List<Person> family = new List<Person>(); NewPersonDialog dialog = new NewPersonDialog(); public Person() { this.name = dialog.tbName.Text; this.surname = dialog.tbSurname.Text; } public string Name { get { return this.name; } set { this.name = value; } } public string Surname { get { return this.surname; } set { this.surname = value; } } public int Born { get { return this.dateOfBirth; } set { this.dateOfBirth = value; } } public int Died { get { return this.dateOfDeath; } set { this.dateOfDeath = value; } } public string Gender { get { return this.gender; } set { this.gender = value; } } public static void AddPersonToFamily(Person created) { family.Add(created); } public static List<Person> GetFamily() { return family; } public static string FamilyToString() { string output = ""; foreach (Person p in family) { output += p.Name + "\r\n"; output += p.Surname + "\r\n"; output += p.Born + "\r\n"; output += p.Died + "\r\n"; output += p.gender + "\r\n"; } return output; } } } Die Klasse NewPersonDialog enthält nur die Methode InitializeComponent() und die notwendigen GUI-Elemente auf dem Formular, ist ansonsten aber leer. Zitieren
Klotzkopp Geschrieben 2. August 2014 Geschrieben 2. August 2014 Jede Person-Instanz befüllt sich aus einer eigenen neuen Instanz von NewPersonDialog (dialog), die, da sie erst mit der Person erstellt und nie angezeigt wurde, natürlich keine Daten enthält. Die Werte des Dialogs, den du tatsächlich anzeigst (form), verwendest du nicht. Zitieren
Saheeda Geschrieben 6. August 2014 Autor Geschrieben 6. August 2014 Danke Klotzkopp, ich habe das Programm nochmal bisschen umgestaltet und deinen Hinweis mit eingebaut. Es funktioniert jetzt so, wie es soll. =) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.