informatikerin86 Geschrieben 23. April 2009 Autor Geschrieben 23. April 2009 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!! Zitieren
informatikerin86 Geschrieben 23. April 2009 Autor Geschrieben 23. April 2009 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! Zitieren
DominikJ Geschrieben 23. April 2009 Geschrieben 23. April 2009 kann nur raten: ListBox1.Refresh() oder update ??? Zitieren
informatikerin86 Geschrieben 23. April 2009 Autor Geschrieben 23. April 2009 hi dominik! diese beiden varianten habe ich auch schon ausprobiert, funktionieren leider auch nicht. es passiert gar nichts. Zitieren
informatikerin86 Geschrieben 23. April 2009 Autor Geschrieben 23. April 2009 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 Zitieren
Naschkatze Geschrieben 21. Juli 2009 Geschrieben 21. Juli 2009 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: Zitieren
JasonDelife Geschrieben 21. Juli 2009 Geschrieben 21. Juli 2009 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. Zitieren
Naschkatze Geschrieben 21. Juli 2009 Geschrieben 21. Juli 2009 Hallo, Es ist doch eine ListBox und keine ListView oder so? Ja, es ist eine ListBox, hab extra nochmal nachgeschaut. Man weiß ja nie... Zitieren
Gateway_man Geschrieben 21. Juli 2009 Geschrieben 21. Juli 2009 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 Zitieren
Guybrush Threepwood Geschrieben 21. Juli 2009 Geschrieben 21. Juli 2009 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 Zitieren
Naschkatze Geschrieben 21. Juli 2009 Geschrieben 21. Juli 2009 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. Zitieren
Naschkatze Geschrieben 21. Juli 2009 Geschrieben 21. Juli 2009 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. Zitieren
Gateway_man Geschrieben 21. Juli 2009 Geschrieben 21. Juli 2009 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. Zitieren
Naschkatze Geschrieben 21. Juli 2009 Geschrieben 21. Juli 2009 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: Zitieren
Guybrush Threepwood Geschrieben 22. Juli 2009 Geschrieben 22. Juli 2009 (bearbeitet) 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 2009 von Guybrush Threepwood Zitieren
Naschkatze Geschrieben 22. Juli 2009 Geschrieben 22. Juli 2009 Ü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! 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.