Soldiar Geschrieben 16. Dezember 2007 Geschrieben 16. Dezember 2007 Hallo, ich versuche gerade ein "DropDown" Menü zu machen, in dem von mehreren Instanzen ( abc1 ; abc2 ; abc3 ; abc4 ) der Inhalt der Felder ".name" angezeigt werden soll. Nun meine Frage, welches Element nehme ich dafür? eine "ListBox" oder was? und wie bekomme ich den Verweis am sinnvollsten hin? Also die Instanzen beziehen sich auf Objekte in einer anderen Klasse (u. ebenfalls anderes integr. dokument). Hoffe um eure hilfe mfg Christian, 19, Kassel Zitieren
derJan Geschrieben 16. Dezember 2007 Geschrieben 16. Dezember 2007 Wie wär's mit ner ComboBox? Galileo Computing: Einstieg in VB.NET – 2.6 Eine ComboBox Zitieren
Soldiar Geschrieben 16. Dezember 2007 Autor Geschrieben 16. Dezember 2007 Hey, das klingt super! Aber wie kriege ich nun die Informationen direkt nach der Instanziierung da rein? Gibts da irgendnen leichten kniff, oder müsste ich automatisch für jedes "dim abc1 as new abc("Kassel")" ein "cbo.Auswahl.add(abc1.name)" tippen, wäre doch dann recht undynamisch, falls ich beispielsweise abc57 erstelle, oder? mfg Christian, 19, Kassel Zitieren
derJan Geschrieben 16. Dezember 2007 Geschrieben 16. Dezember 2007 Wie und wo erstellst du denn die Objekte? Zitieren
Soldiar Geschrieben 16. Dezember 2007 Autor Geschrieben 16. Dezember 2007 Hallo, Programmablauf.vb Dim abc1 As New abc("Kassel") Console.WriteLine(abc1.GetName) nun steht in meiner anderen Klasse (abc) in der Datei abc.vb Public Function GetName() As String Return Me.sName end function Sub New(ByVal nam As String) Me.sName = nam End Sub Selbstverständlich habe ich noch andere Methoden, die meist über die Eigenschaften auf die Felder zugreifen. Ich würde nun gerne die anderen Felder angezeigt kriegen, allerdings aufgeteilt auf verschiedene Textboxen. Also es sind 4 weitere Felder, die in Textboxen kommen sollen. Bei abc1 steht in denen bsp. (3;7;9;100;"Kassel") und bei abc2(4;9;2;39;"Berlin") und diese vorderen felder sollen dort hineingebracht werden. Theoretisch könnte ich ja nun einfach wieder eine "select-case" abfrage machen, aber dann würde ich ja den OOP-Ansatz verlieren, oder? mfg Christian, 19, Kassel Zitieren
derJan Geschrieben 16. Dezember 2007 Geschrieben 16. Dezember 2007 ich würde die Objekte beim Erstellen in ein Dictionary(Of String, KLASSENNAME) packen, dann den Namen jedes Objektes in die DropDown-Box stecken. Die DropDown-Box hat ein Event namens IndexChanged oder SelectedIndexChanged, darin dann auf das Dictionary zugreifen (dictObjekte("NAME_DER_IN_DER_DROPDOWNBOX_ANGEZEIGT_WIRD") gibt dann das Objekt zurück) und dann kannst du die Textboxen mit den Daten aus dem Objekt füllen.) Zitieren
derJan Geschrieben 16. Dezember 2007 Geschrieben 16. Dezember 2007 Hier mal als VS2005-Projekt, kurz runtergetippt, keine Garantie auf vollständige Funktionalität, aber das Prinzip sollte klar werden...Objekte in DropDownBox.zip Zitieren
Soldiar Geschrieben 16. Dezember 2007 Autor Geschrieben 16. Dezember 2007 Hey, vielen dank. Klingt sehr interressant das mit dieser dictionary, werde es mir morgen mal anschauen, heute hab ich erstmal genug von vb ^^ Vielen dank für die mühe und die zeit! mfg Christian, 19, Kassel Zitieren
Guybrush Threepwood Geschrieben 17. Dezember 2007 Geschrieben 17. Dezember 2007 Der Text den das DropDown Feld anzeigt ist der den ToString() zurückgibt. Das heißt du kannst auch einfach direkt dein Object darein stecken wenn du ToString entsprechend überlädst. Zitieren
Soldiar Geschrieben 17. Dezember 2007 Autor Geschrieben 17. Dezember 2007 Hallo, @Guybrush Threepwood: jetzt haste mich aber aufm falschen Zeh getroffen. Wie kann ich denn ".toString" überladen? habs mal mit "Public Overrides Function ToString() As String" sowie "Public Overrides Sub ToString()" probiert, und einen Fehler erhalten. @derJan: die Lösung ist echt super! Habe da von mir erstmal reichlich was abgeschaut, vielen dank! Echt klasse! mfg Christian, 19, Kassel ps: kleine weitere Frage. ich möchte irgendwie vom zuvorigen Formular, an das nächste nachrichten übermitteln (ähnlich so einem php get/post) oder eben eine abfrage ".lastform" o.s. gibt es soetwas? Würde das nämlich gerne auswerten und dementsprechend gewisse Textboxen aktiv o. inaktiv setzen. Zitieren
derJan Geschrieben 17. Dezember 2007 Geschrieben 17. Dezember 2007 Um "Nachrichten" an eine Form zu übergeben erstell in der Form Public Properties die du dann füllst. Etwa so Dim frm As New frmFoo frm.MyProperty = "Daten" frm.Show() ToString überladen: In deiner Daten-Klasse (MyObject.vb): Public Overrides Function ToString() As String Return Name() End Function (Tipp: Mir zeigt VisualStudio nach Eingabe von "public overrides " eine Liste der möglichen zu überschreibenden Methoden an...) Allerdings mag ich das direkte Ablegen von Objekten in der DropDown-Liste nicht so sehr, da ich in meinen Programmen Daten (Model) und Ansicht (View) trenne - die Form-Codedatei dient nur dem reinen Anzeigen der Daten, das Füllen übernimmt evtl. noch eine Controller-Klasse (googel mal nach dem MVC-Pattern...). 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.