23. April 200916 j ich hatte niemals die absicht das zwei items in der liste ausgewählt werden können, das würde in meinem fall auch überhaupt keinen sinn ergeben. es klappt jetzt und das ist die hauptsache!!
23. April 200916 j Ich möchte keinen neues Thema eröffnen, ist eigentlich auch nur ne kleine Frage und wieder zum Thema ListBox. Ich möchte ein Element in der ListBox löschen, bzw. ich aktualisiere meine Daten in DataAdapter. Wie sage ich der ListBox nun das sie sich auch sofort aktualisieren soll? Das hier funktioniert schon mal nicht: Me.ListBox1.Items.Clear() Me.ListBox1.DataSource = Me.DataView1 Me.ListBox1.DisplayMember = "SAP-Nr" Weil er sagt Items.Clear kann nicht bei DataSource angewendet werden. Me.ListBox1.DataSource = Nothing Hilft leider auch nichts!
23. April 200916 j hi dominik! diese beiden varianten habe ich auch schon ausprobiert, funktionieren leider auch nicht. es passiert gar nichts.
23. April 200916 j Nicht schön aber was anderes fällt mir gerade nicht ein: Ich schließe mein Sub und öffne ein "Zwischensub" das beim laden mein Sub wieder neu aufruft. Das ganze funktioniert schnell genug, sodass es nach einer Aktualisierung bei Knopfdruck aussieht
21. Juli 200916 j Hallo zusammen, da meine Frage fast die gleiche wie die Eröffnungsfrage ist, mache ich einfach mal hier weiter. Also... Problemstellung: Mittels Listbox ausgewählte Daten vom Typ Note (eine eigene Klasse) in einem Textfeld ausgeben. Ich habe eine Klasse Notes mit den Elementen Title und Content, beides String-Variablen. Die angelegten Notizen werden in einer Arraylist namens allNotes gespeichert. Der Inhalt von Title und Content der in der Listbox ausgewählten Notiz soll nun in einem Textfeld angezeigt werden. Also, eins für den Titel und eins für den Content, nicht zusammen im selben Feld. Nach vielem Ausprobieren habe ich dann Dominiks Vorschlag in Post 12 genommen. Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" For Each item As Object In ListBox1.SelectedItems TextBox1.Text = TextBox1.Text & item & vbCrLf Next End Sub End Class Private Sub ListBox_Notes_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox_Notes.SelectedIndexChanged For Each item As Note In ListBox_Notes.SelectedItems TextBox_ShowTitle.Text = item.title TextBox_ShowContent.Text = item.content Next End Sub Daraufhin bekam ich zwar keine Fehlermeldung, aber angezeigt wurde auch nichts. Gebe ich direkt einen Wert ein...: TextBox_ShowTitle.Text = item.title wird zu TextBox_ShowTitle.Text = "Test" ...funktioniert es jedoch, sprich, der manuell eingegebene Wert wird angezeigt. Die Listbox übernimmt doch aber die gesamten Objekte, oder nicht? Oder muss ich anhand des Indexes oder so das passenden Objekt aus meiner allNotes ArrayList raussuchen und dort die Daten entnehmen? Ich hoffe, ihr könnt meiner Logik ein wenig auf die Sprünge helfen. Lieben Gruß, Julia Da ich immer nur eine Notiz angezeigt haben will, wurde bei mir folgende Version daraus:
21. Juli 200916 j Wenn sowieso nur eines angezeigt werden soll, wieso dann nicht ListBox.SelectedItem? Noch nach Note casten und fertig. Es ist doch eine ListBox und keine ListView oder so? Grüße, JasonDelife.
21. Juli 200916 j Hallo, Es ist doch eine ListBox und keine ListView oder so? Ja, es ist eine ListBox, hab extra nochmal nachgeschaut. Man weiß ja nie...
21. Juli 200916 j Warum machst du es denn so umständlich? Wozu die Schleife ? Du gehst auf deine Listbox. Gehst auf das event selected value change und tippst einfach folgendes ein: Private Sub ListBox1_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedValueChanged TextBox1.Text = ListBox1.SelectedItem End Sub
21. Juli 200916 j Könnte es mit meiner Methode zur Auflistung selbst zu tun haben?: Public Sub listNotes() ListBox_Notes.Items.Clear() For Each Me.listElement In allNotes ListBox_Notes.Items.Add(listElement.title) Next End Sub Du füllst die ListBox ja nur mit den Titeln deiner Objekte, dann stehen natürlich auch nur diese drin
21. Juli 200916 j Du füllst die ListBox ja nur mit den Titeln deiner Objekte, dann stehen natürlich auch nur diese drin Ha! Na, immerhin hatte ich ne Ahnung, woran es liegen könnte :-P Wie muss ich die Liste denn dann füllen? Ich hatte den Ausdruck ListBox_Notes.Items.Add(listElement.title) extra gewählt, weil ich gerne die Titel in der Liste angezeigt haben wollte. Die Inhalte hingegen sollen erst nach anklicken in nebenstehenden Textfeldern erscheinen.
21. Juli 200916 j Warum machst du es denn so umständlich? Wozu die Schleife ? Du gehst auf deine Listbox. Gehst auf das event selected value change und tippst einfach folgendes ein: Private Sub ListBox1_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedValueChanged TextBox1.Text = ListBox1.SelectedItem End Sub So komm ich aber doch nicht an meine einzelnen Klassenelemente .title und .content ran.
21. Juli 200916 j wie schon der pirat vor mir gesagt hat sind da nur die titel drin. Wäre aber hilfreich n bisschen mehr input aus deiner klasse zu bekommen. welchen rückgabetyp hat content denn? Allgemein müstest du ne if schleife durchlaufen lassen in welche du immer den titel abfrägt und wenn der user dann auf den passenden Titel in der listbox klickt kommt er an die schleife wo es dann übereinstimmt und du rufst dann den jeweiligen content dazu auf. if listbox1.selectedvalue = "{Titel}" Then note.content ....... ...... elseif ... .... end if Alternativ nen Caseblock.
21. Juli 200916 j wie schon der pirat vor mir gesagt hat sind da nur die titel drin. Wäre aber hilfreich n bisschen mehr input aus deiner klasse zu bekommen. welchen rückgabetyp hat content denn? Meine Klasse Note: Public Class Note Public title As String Public tags As String Public content As String Public Sub New() End Sub Public Sub New(ByVal title As String, ByVal tags As String, ByVal content As String) Me.title = title Me.tags = tags Me.content = content allNotes.Add(Me) End Sub End Class Hier nochmal zur Übersicht ein Auszug aus meinem Anfangspost:
22. Juli 200916 j weil ich gerne die Titel in der Liste angezeigt haben wollte. Die Inhalte hingegen sollen erst nach anklicken in nebenstehenden Textfeldern erscheinen. Überschreib in deinr Note Klasse einfach die ToString Methode und gib da den Titel zurück, wenn du dann die ListBox mit den Note Objekten füllst sollte der Titel in der Liste angezeigt werden. Alternativ (und wahrscheinlich auch schöner) kannst du die Liste auch einfach binden: public partial class Form1 : Form { class Test { public string Title { get; set; } public string Data { get; set; } } public Form1() { InitializeComponent(); List<Test> l = new List<Test>() { new Test() { Title = "T1", Data = "D1" }, new Test() { Title = "T2", Data = "D2" }, new Test() { Title = "T3", Data = "D3" } }; listBox1.DataSource = l; listBox1.DisplayMember = "Title"; listBox1.ValueMember = "Data"; } } [/PHP] Bearbeitet 22. Juli 200916 j von Guybrush Threepwood
22. Juli 200916 j Überschreib in deinr Note Klasse einfach die ToString Methode und gib da den Titel zurück, wenn du dann die ListBox mit den Note Objekten füllst sollte der Titel in der Liste angezeigt werden. Ay, das war ja einfach! So funktioniert's, vielen Dank! Die ToString der Klasse überschrieben, so dass nur der Titel zurückgegeben wird, zum Füllen der Liste dann das gesamte Objekt genommen statt nur den Titel ( :upps ) und dann war das Ausgeben in den Textfeldern auch kein Problem mehr. Dass mit dem Binden der Liste werd ich auch noch ausprobieren. Mag ja schließlich alles richtig machen und nicht unbedingt tricksen. Aber immerhin sehe ich so schon mal ein Ergebnis, das motiviert doch ganz gewaltig! Vielen, vielen Dank für die schnelle Hilfe!
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.