Autor |
Beitrag |
Murphy9904
Hält's aus hier
Beiträge: 14
|
Verfasst: Mi 08.09.10 09:47
Hi,
ich möchte wie die Überschrift schon sagt den Einträgen aus einer "List Box" einzelne Werte Zuweisen
Das stelle ich mir nicht ganz leicht vor weil die Einträge die Reihenvolge ändern können
Hab hier ein Bild:
Ich möchte dass ich Pro Eintrag einen eigenen "Alias" Vergeben kann und das am Ende Speichern
(ich könnte ja auch Pro Eintrag eine eigene Variable erstellen aber wenn das mehr werden macht das kein sinn)
Danke schonmal
Murphy
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mi 08.09.10 10:59
Hallo,
du kannst dem ListBoxItem im Tag Objekt ein beliebiges Objekt hinzufügen.
Das Objekt kannst du dann mit entsprechenden Properties versehen. Beim Auswählen eines Item übergibst du dann dieses Tag (cast wird benötigt). Die Properties kannst du dann beliebig zuweisen.
Gruß
Für diesen Beitrag haben gedankt: Murphy9904
|
|
Necaremus
      
Beiträge: 203
Erhaltene Danke: 18
Win > XP, Vista, 7; Android 2.1
C# > VS '08,'10; Delphi7
|
Verfasst: Mi 08.09.10 11:05
alternativ, solltest du mehr als nur 1 wert benötigen, kannst du dir eine eigene klasse bauen, die dann vom ListBoxItem erbt 
Für diesen Beitrag haben gedankt: Murphy9904
|
|
Murphy9904 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mi 08.09.10 11:10
hi
Danke für die schnellen Antworten,
Ich bin ja noch recht neu in C# und das ging mir grad bissel zu schnell
ListBoxItem im Tag Objekt <-- wo ist das?
Und Klasse bauen wäre warscheinlich angebracht --> hab ich aber auch noch nie gemacht.. (aber das schaff ich schon)
Danke, ich hoffe ich bekomme das hin
LG
Murphy
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mi 08.09.10 11:18
Deiner ListBox fügst du Objekte hinzu. Angezeigt wird dann die String-Repräsentation davon. Ich gehe davon aus, dass du strings hinzufügst. Mit dem Objekt folgt das analog, nur das du eben die Instanz der erstellten Klasse verwendest.
C#-Quelltext 1: 2: 3: 4: 5:
| ListBox lb = new ListBox();
MyClass item1 = new MyClass("Eintrag1", "alias");
lb.Items.Add(item1); |
Und schon "verbirgt" sich hinter dem ListBoxItem ein Objekt vom Typ MyClass mit den beliebigen Informationen.
|
|
Necaremus
      
Beiträge: 203
Erhaltene Danke: 18
Win > XP, Vista, 7; Android 2.1
C# > VS '08,'10; Delphi7
|
Verfasst: Mi 08.09.10 11:20
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| public class MyListBoxItem : ListBoxItem { public string Alias { get; set; }+ public Types Type { get; set; } public enum Types { Project, ProjectGroup }
public MyListViewItem(string name, string alias, Types type) { this.Name = name; this.Text = name; this.Alias = alias; this.Type = type; } } |
... da war wer anders schneller^^
das hier wäre halt die "MyClass".
Für diesen Beitrag haben gedankt: Murphy9904
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mi 08.09.10 11:23
Eine ListBox nimmt beliebige Objekte auf, dementsprechend muss man nicht von ListBoxItem ableiten.
Was in der Liste angezeigt wird bestimmst du indem du die ToString-Methode überschreibst.
|
|
Murphy9904 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mi 08.09.10 11:59
Wow danke für die ganzen Antworten..
aber ich blicke durch eure Codes noch nicht ganz durch
was genau soll das ListBoxItem Darstellen?
Quelltext 1:
| public class MyListBoxItem : ListBoxItem //<-- das hier |
und was der cunstructor anstellt hab ich auch nicht raus - sollte man das nicht als "void" schreiben? oder muss die dann auch einfach nur MyListBoxItem heissen?
was verbirgt sich denn hinter dem Types?
LG Murphy
bei mir schaut das jetz so aus:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| public class MyListBoxItem : MyListBoxItem { public string Alias { get; set; } public string Name { get; set; } public string Text { get; set; }
public Types Type { get; set; } public enum Types { Project, ProjectGroup }
//cunstructor public MyListBoxItem(string name, string alias, Types type) { this.Name = name; this.Text = name; this.Alias = alias; this.Type = type; } } |
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mi 08.09.10 12:26
Für diesen Beitrag haben gedankt: Murphy9904
|
|
Necaremus
      
Beiträge: 203
Erhaltene Danke: 18
Win > XP, Vista, 7; Android 2.1
C# > VS '08,'10; Delphi7
|
Verfasst: Mi 08.09.10 13:02
blubb, den rest hinterm alias hatte ich aus meinem snippet(code beispiel) dran hängen lassen, damit du sehen kannst, wie man soetwas eventuell erweitern könnte...
benötigen tust du das aufjedenfall nicht x_X
des weiteren hatte ich das control grad mit listview verwechselt... daher die ableitung :/
der cunstructor wird aufgerufen wenn du zb. MyClass myClass1 = new MyClass() aufrufst.
prinzipiell würde dir aber ja schon ne klasse mit 2 strings reichen... also
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| public class MyClass { public string Name { get; set; } public string Alias { get; set; } public MyClass(string name, string alias) { this.Name = name; this.Alias = alias; } } |
|
|
Murphy9904 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mi 08.09.10 13:12
Ok cool, ja habe es jetzt für meine Zwecke angepasst.
jetzt nurnoch ein Problem.. ich hatte davor mit "ListBoxRight.SelectedItem" das selectierte Objekt aufindig gemacht. jetzt funktioniert das aber nicht mehr
ListBoxRight.SelectedItem.ToString() sagt mir dann nur: "WindowsFormsApplication1.MyListBoxItem"
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mi 08.09.10 13:15
SelectedItem ist jetzt eine Instanz von deinem Klassentyp MyListBoxItem.
Dort wo du mit SelectedItem arbeiten willst musst du also auf MyListBoxItem casten.
C#-Quelltext 1: 2: 3: 4: 5:
| MyListBoxItem item = ListBoxRight.SelectedItem as MyListBoxItem; if(item != null) { } |
Für diesen Beitrag haben gedankt: Murphy9904
|
|
Murphy9904 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mi 08.09.10 13:29
Geil,
klappt jetzt fast alles so wie ich es brauche
jetzt geht aber eines nicht..
ich hab so paar Buttons gemacht um die Einträge von der einen Seite auf die Andre zu schieben.. das hatte ich mit ListBoxLeft.Items.Add() & ListBoxRight.Items.Remove() gemacht.
das klappt aber nichmehr
was kann ich da machen?
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mi 08.09.10 13:44
Zeig mal deinen Code und sag deutlicher was nicht geht.
Ein Code zum verschieben z.B. so
C#-Quelltext 1: 2: 3: 4: 5: 6:
| MyListBoxItem item = ListBoxLeft.SelectedItem as MyListBoxItem; if(item != null) { ListBoxLeft.Items.Remove(item); ListBoxRight.Items.Add(item); } |
geht nicht?
|
|
Murphy9904 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mi 08.09.10 13:50
Sorry mit If hatte ichs nich getestet.. so gehts..
aber da geht es dann nicht wenn man mehrere gleichzeitig verschieben will
(ich habs mir while gemacht damit es auch mit mehreren geht)
Zur not muss ich dann halt paar mal Klicken.. das is jetzt nur ein kleiner "Schönheitsfehler"
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mi 08.09.10 14:18
Zitat: | aber da geht es dann nicht wenn man mehrere gleichzeitig verschieben will |
Dann halt
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if (ListBoxLeft.SelectedItems.Count > 0) { MyListBoxItem[] items = new MyListBoxItem[ListBoxLeft.SelectedItems.Count]; ListBoxLeft.SelectedItems.CopyTo(items, 0); foreach (var item in items) { ListBoxLeft.Items.Remove(item); ListBoxRight.Items.Add(item); } } |
Für diesen Beitrag haben gedankt: Murphy9904
|
|
Murphy9904 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mi 08.09.10 14:34
Cool is ja Hammer wie einem hier geholfen wird..
Also nochmal danke an alle!
Ich denke damit is das Thema erledigt..
LG
Murphy
|
|