Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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!

Geschrieben

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 :)

  • 2 Monate später...
Geschrieben

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:
Geschrieben

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

Geschrieben

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 ;)

Geschrieben
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.

Geschrieben
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.

Geschrieben

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.

Geschrieben
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:

Geschrieben (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 von Guybrush Threepwood
Geschrieben
Ü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!

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...