Entwickler-Ecke

WinForms - Einträge in Combo box ändern


Murphy9904 - Mo 13.09.10 12:48
Titel: Einträge in Combo box ändern
Hi,
ist es möglch die Einträge iner Combo box zu ändern?
Ich möche je nachdem welches Objekt aus einer Listbox ausgewählt ist andere Auswahlmöglichkeiten in meiner Combo Box haben (diese sollen aus der Klasse von dem Objekt entnommen werden)

mit Box.Items.Add kann ich Objekte hinzufügen. aber wie bekomm ich die Vorigen dann wieder weg?

und gibt es eine Möglichkeit einer Klasse verschieden viele Werte zuweisen zu lassen?
Wenn eine normale Klasse erstelle muss ja normalerweise jeder darin aufgeführte Wert belegt sein.

LG
Murphy


danielf - Mo 13.09.10 13:17

Hallo,

bei MSDN findest du immer Informationen zu den .NET Klassen. So auch zu der CheckBoxList [http://msdn.microsoft.com/en-us/library/zysssw8w.aspx]. In den Properties findest du heraus, dass Items vom Typ ListItemCollection ist. Wenn du dir diese Klasse [http://msdn.microsoft.com/en-us/library/ez4tsddk.aspx] anschaust findest du eine Auflistung aller Methoden [http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitemcollection_methods.aspx] samt Beschreibung. Da wirst du eine passende Methode finden.

Gruß


Ralf Jansen - Mo 13.09.10 13:20

Zitat:
Ich möche je nachdem welches Objekt aus einer Listbox ausgewählt ist andere Auswahlmöglichkeiten in meiner Combo Box haben (diese sollen aus der Klasse von dem Objekt entnommen werden)

mit Box.Items.Add kann ich Objekte hinzufügen. aber wie bekomm ich die Vorigen dann wieder weg?


Box.Items.Clear vor dem hinzufügen der neuen Liste? Einfacher wäre das per Databinding wenn also deine Klasse eine Liste der möglichen Combobox Werte hält einfach diese Liste der Datasource der Combobox zuweisen.


Zitat:
und gibt es eine Möglichkeit einer Klasse verschieden viele Werte zuweisen zu lassen?


Du sprichst im Rätseln. Für verschieden Mengen an Werten gib es verschiedene List Klassen (Arrays, generische Listen, Collections, Dictionaries, Hashsets etc.). Such dir das passende aus.


C#-Quelltext
1:
Wenn eine normale Klasse erstelle muss ja normalerweise jeder darin aufgeführte Wert belegt sein.                    


Ein nicht zugewiesene Property hat ihren Defaultwert. Denn musst du nur passend definieren so das der als ~unbelegt~ gilt. Da hilft vielleicht schon einfach diesen Wert als nullable zu definieren.


Murphy9904 - Mo 13.09.10 13:51

gut,
das sieht so aus als müsst ich einfach ein Array in meine Klasse schreiben.
jetzt mal ne ganz doofe Frage: wie geht denn das in der Klasse?
normal schreibt man ja nur: "string[] bla = new string[10];" , und man hat sich ein Array gebastelt.

wie macht man das bei der Klasse dann? so dass das auch im "Constructor" drinnen is?


Yogu - Mo 13.09.10 15:31

Du kannst deiner Klasse ein privates Feld hinzufügen, indem du eben diese Zeile in den Klassenblock schreibst, also etwa so:


C#-Quelltext
1:
2:
3:
class MyClass {
  private string[] myArray = new string[10];
}


Die Zuweisung könntest du auch im Konstruktur vornehmen.


Murphy9904 - Mo 13.09.10 15:44

Danke,
hatte mich grad nur etwas doof angestellt :D

und wie kann ich bei nem Array einen Standartwert setzen? und wie fülle ich das Array dann?
irgendwie klappt das alles nicht so wie ich will.. (ich wills warscheinlich einfach nur falsch)

so ist das anscheinend nicht richtig:

Quelltext
1:
MyListBoxItem Item = new MyListBoxItem("test",{"wert1","wert2"});                    


Quelltext
1:
2:
 public MyListBoxItem(string name,string[] auswahl)
.....


wie geht das dann?


Yogu - Mo 13.09.10 18:55

user profile iconMurphy9904 hat folgendes geschrieben Zum zitierten Posting springen:
und wie kann ich bei nem Array einen Standartwert setzen?

anstatt mit new string[10] kannst du ein Array auch z.B. mit new string[] { "blah""blubb" } initialisieren.

user profile iconMurphy9904 hat folgendes geschrieben Zum zitierten Posting springen:
und wie fülle ich das Array dann?

Du kannst dem Feld jederzeit einen neuen Wert zuweisen, wie oben beschrieben. Wenn du aber einen Eintrag nach dem anderen hinzufügen oder entfernen willst, solltest du eine List<string> verwenden, die z.B. die Methode Add besitzt. Anschließend kannst du die Liste mit ToArray() in ein string[] konvertieren.

user profile iconMurphy9904 hat folgendes geschrieben Zum zitierten Posting springen:
so ist das anscheinend nicht richtig:

Quelltext
1:
MyListBoxItem Item = new MyListBoxItem("test",{"wert1","wert2"});                    

Schon ganz nah dran, einfach ein new string[] vor "wert1, "wert2" } setzen, und d hast's :idea:


Murphy9904 - Mo 20.09.10 13:32

gut danke..

Ich hab heut mal bissel in meinem C# Buch rumgelesen, und da war dann etwas mit Parameterlisten erklährt

Beispiel


Quelltext
1:
public MyListBoxItem(string bla,params string[] CoolesArray)                    

hier kann ich jetzt nach hinten offen beliebig viele Werte eintragen:

Quelltext
1:
MyListBoxItem weight = new MyListBoxItem("Gewicht", "t","kg","g","mg");                    

und das ist das was auf meine Ursprüngliche Frage: "und gibt es eine Möglichkeit einer Klasse verschieden viele Werte zuweisen zu lassen? " Perfekt passt

Danke trotzdem für all eure Ideen :)


Yogu - Mo 20.09.10 15:09

Das params-Schlüsselwort ist eine Ergänzung für Array-Parameter, die das Aufrufen in manchen Fällen etwas erleichtert. Ich denke es, man sollte trotzdem wissen, wie es eigentlich heißen müsste (siehe vorheriger Post vom mir). Wenn du das verstanden hast, kannst auch auch Parameterlisten verwenden, um den Aufruf zu vereinfachen.


Murphy9904 - Mo 20.09.10 15:30

Jap nur mit dem normalen Array hätte ich ja für jedes Objekt ein Array erstellen und anpassen müssen.
aber habs schon verstanden wie du gemeint hattest.. Danke nochmal

LG Murphy