Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

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

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!

kann nur raten:

ListBox1.Refresh()

oder update ???

hi dominik!

diese beiden varianten habe ich auch schon ausprobiert, funktionieren leider auch nicht. es passiert gar nichts.

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

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:

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.

Hallo,

Es ist doch eine ListBox und keine ListView oder so?

Ja, es ist eine ListBox, hab extra nochmal nachgeschaut. Man weiß ja nie... :)

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

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

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.

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.

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.

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:

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

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.