Zum Inhalt springen

Noch ein ListBox-Problem


informatikerin86

Empfohlene Beiträge

Hallo,

wenn ich so weiter frage brauche ich bald nen zweiten Usernamen... :old

Ich programmiere mit VB.net und habe in meiner Form eine ListBox. Ich möchte nun den ausgewählten Eintrag anzeigen lassen bzw. danach in einer Txt-Datei speichern.

Zu dem Problem habe ich in einem Buch und auch auf mehrern Webseiten etwas gefunden:

    

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

stsitem = ListBox1.SelectedItem

TextBox1.Text = ListBox1.SelectedItems

End Sub

Das scheint auch überall zu funktionieren, bei mir kommt allerdings immer der Fehler:

"Der Wert des Typs"System.Windows.Forms.ListBox.SelectedObjectCollection" kann nicht zu "String" konvertiert werden."

Weiß jemand an was das liegen könnte?

Ich verzweifle hier so langsam...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nuja, sagt die Fehlermeldung ja schon aus.

selectedItems gibt kein String zurück sondern eine Collection vom Typ SelectedObjectCollection.

Diese musst du durchlaufen. Entweder mit 'GetEnumerator' oder mit

'Count' eine schleife durchlaufen, dazu brauchst du dann noch item().

Besser Fragen als dumm sterben oder nicht?

Wenigstesn arbeitest du soweit selbständig ,dass du nicht ein ganzes Programm geschrieben haben willst sondern dir einfach noch ein wenig wissen fehlt und du dir dieses erfragst.

Gruß Dominik

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das verstehe ich nicht ganz, also ich habe das mal geschrieben:


Dim soc As ListBox.SelectedObjectCollection

soc = ListBox1.SelectedItem
Jetzt wird in soc mein ausgewählter Eintrag gespeichert. Aber ich verstehe das Problem nicht, das Buch und alle Einträge im Internet beschreiben es so einfach, warum klappt das dann nicht? Immerhin wurde das Buch von meinem Prof geschrieben, der wirklich was drauf hat. Naja, hilft ja blöderweise nichts. GetEnumerator ist mir zu kompliziert, das hab ich eben auf msdn angeschaut. Ich soll eine Schleife durchlaufen, ich weiß das sie nur einen Eintrag enthält, also:
Dim i As Integer

For i = 1 

stsitem = soc.Item(0)

Next

TextBox1.Text = stsitem

Das war meine Überlegung, funktioniert natürlich nicht, ich weiß auch nicht genau wo ich das Count einbauen soll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gabs nicht auch ein listbox.SelectedItem.Text oder ein listbox.SelectedText? Kann mich auch irren, aber bei irgendeinem Control habe ich letztere Eigenschaft schon gesehen. Oder möchtest du mehrere Einträge in einer Textbox anzeigen lassen? Dann müsstest du zusätzlich mit ner Schleife arbeiten.

Gruß Kati82

Link zu diesem Kommentar
Auf anderen Seiten teilen


Dim soc As ListBox.SelectedObjectCollection

soc = ListBox1.SelectedItem
Jetzt wird in soc mein ausgewählter Eintrag gespeichert.
Stimmt so nicht ganz.
Aber ich verstehe das Problem nicht, das Buch und alle Einträge im Internet beschreiben es so einfach, warum klappt das dann nicht?
Wird es genauso beschrieben?
Immerhin wurde das Buch von meinem Prof geschrieben, der wirklich was drauf hat.
Glaub ich dir gern :)
GetEnumerator ist mir zu kompliziert, das hab ich eben auf msdn angeschaut.
Macht ja nichts, evtl. gleich dazu ein beispiel von mir
Ich soll eine Schleife durchlaufen, ich weiß das sie nur einen Eintrag enthält, also:
Dim i As Integer

For i = 1 

stsitem = soc.Item(0)

Next

TextBox1.Text = stsitem
Fast
Das war meine Überlegung, funktioniert natürlich nicht, ich weiß auch nicht genau wo ich das Count einbauen soll.
Machen wir ;)

        For Each item As Object In ListBox1.SelectedItems

            Debug.Print("For Each: " & item)

        Next


        For i As Integer = 0 To ListBox1.SelectedItems.Count - 1 Step 1

            Debug.Print("For: " & ListBox1.SelectedItems.Item(i))

        Next


        Dim col As System.Collections.IEnumerator = ListBox1.SelectedItems.GetEnumerator

        While col.MoveNext

            Debug.Print("Enumerator: " & col.Current)

        End While

Such dir die für dich passendste Version aus.

Darfst gerne auch Fragen wieso weshalb und warum das so und nicht so geht :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

@kati82: Nein es gibt weder listbox.SelectedItem.Text noch listbox.SelectedText, das wäre scheinbar zu einfach :)

Ich will auch nur einen einzelnen Wert auslesen.

@Dominik: Das Buch von meinem Prof ist für Anfänger, es wird ne Form gemacht, eine Listbox und eine TextBox drauf und dann Aktionen mit der ListBox, wie eben das auslesen, das exakt so dasteht.

Ich habe mich für die erste Möglichkeit entschieden (die sieht einfacher aus), allerdings gibt es einen Fehler bei debug.print, was an sich nicht so schlimm ist da ich den wert (vorerst) in einem Textfeld speichern will.

Verrätst du mir wie ich das dann da reinbekomme?

Wenn du mir noch mehr hilfst komme ich bald nicht mehr drum rum dich als Literaturquelle in meiner Bachelorarbeit zu erwähnen ;)

Für heute ist jetzt allerdings schon wieder Schluss, mein Allergologe ist sonst ganz arg sauer *g*

Ich hoffe du bist morgen auch wieder in der Nähe!! :uli

LG Simone

Link zu diesem Kommentar
Auf anderen Seiten teilen

@kati82: Nein es gibt weder listbox.SelectedItem.Text noch listbox.SelectedText, das wäre scheinbar zu einfach :)

Ich will auch nur einen einzelnen Wert auslesen.

SelectedItems enthält eine Liste aller ausgewählten ListBoxItems. Davon musst du dir natürlich dann das gewünschte raussuchen und dieses hat dann wie jedes ListBoxItem auch einen Text.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe mich für die erste Möglichkeit entschieden (die sieht einfacher aus), allerdings gibt es einen Fehler bei debug.print, was an sich nicht so schlimm ist da ich den wert (vorerst) in einem Textfeld speichern will.

Verrätst du mir wie ich das dann da reinbekomme?

Das ist doch nun kein Problem mehr oder?

Anstatt "debug.print" nimmste "textbox1.text ="

Wenn mehrere auswählbar sein sollen halt jeweils noch den vorherigen inhalt mit reinschreiben.

Wenn du mir noch mehr hilfst komme ich bald nicht mehr drum rum dich als Literaturquelle in meiner Bachelorarbeit zu erwähnen

Juhu, ein Stückchen rum für mich :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Guten Morgen,

Das ist doch nun kein Problem mehr oder?

Anstatt "debug.print" nimmste "textbox1.text ="

Darauf bin ich doch ehrlich gesagt auch selbst gekommen, allerdings kommt da der bekannte Fehler:

"Eine nicht behandelte Ausnahme des Typs 'System.InvalidCastException' ist in microsoft.visualbasic.dll aufgetreten.

Zusätzliche Informationen: Ungültige Konvertierung von Typ 'DataRowView' in Typ 'String'."

Juhu, ein Stückchen rum für mich

Du kannst auch gerne ein "Stückchen" rum haben oder besser ein Schlückchen? *g* Ruhm wäre da doch sicher besser ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Morjen Simone...

Ja Rum nehm ich auch. Sollte aber eigentlich mal Ruhm werden :D

Ohh, ich dachte es ging hier um eine nomale Listbox.

Da geht es nämlich so ohne Probleme.

Also du hast das erste Beispiel genommen:


        TextBox1.Text = ""

        For Each item As Object In ListBox1.SelectedItems

            TextBox1.Text = TextBox1.Text & item & vbCrLf

        Next

(so währe es)

Die Fehlermeldung sagt uns nun aber, dass dein Item ein DataRowView ist.

Was setzt du denn nun ein?

Gruß Dominik

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie kann das sein das mein Item ein DataRowView ist wenn ich eine ListBox gemacht habe? :confused:

Auch wenns lang ist, hier mal der Code meiner Form5:

Imports System.IO

Imports System.Collections


Public Class Form5

    Inherits System.Windows.Forms.Form


    Public stsitem As String


    Public xlsapp As New Microsoft.Office.Interop.Excel.Application


#Region " Vom Windows Form Designer generierter Code "

#End Region


    Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        Dim f2 As New Form2

        f2.Label2.Text = Label2.Text


        Me.OleDbDataAdapter1.Fill(Me.DataSet21)


        ListBox1.ClearSelected()


        'Dim lbx As New ListBox

        'fillListBox(DataSet321.Tables("[Prozessdaten 2641]"), "SAP-Nr", ListBox1)


    End Sub


    'Private Sub fillListBox(ByRef table As DataTable, ByVal columnName As String, ByRef lbx As ListBox)

    '  lbx.BeginUpdate()

    ' lbx.Items.Clear()

    'For Each row As DataRow In table.Rows

    '  lbx.Items.Add(row(columnName).ToString())

    'Next

    'lbx.EndUpdate()

    'End Sub


    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Dim f6 As New Form6

        f6.Show()

        Me.Hide()

    End Sub


    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

        'stsitem = ListBox1.SelectedItem

        'Dim soc As ListBox.SelectedObjectCollection

        'soc = ListBox1.SelectedItem


        For Each item As Object In ListBox1.SelectedItems

            'Debug.Print("For Each: " & item)

            TextBox1.Text() = item


        Next

        'TextBox1.Text = stsitem


    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        'Dim mIndex As Integer = ListBox1.SelectedIndex

        'stsitem = ListBox1.Items.Item(mIndex)


        IO.File.Delete("D:\excelvar.txt")


        Dim FStreami As New FileStream("D:\excelvar.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write)

        FStreami.Close()

        Dim sFilePathe As String = "d:\excelvar.txt"

        Dim streami As FileStream = New FileStream(sFilePathe, FileMode.Append)

        Dim SWriter As StreamWriter = New StreamWriter(streami, System.Text.Encoding.Default)

        Dim CurrentUser As String

        CurrentUser = System.Security.Principal.WindowsIdentity.GetCurrent.Name


        SWriter.Write(stsitem)

        SWriter.Close()


        Try

            xlsapp.Workbooks.Open("Z:\PD-DB\2641_FreigAufruf.xls")

            xlsapp.Visible = True

        Catch ex As Exception

            MessageBox.Show("Datei ist nicht vorhanden oder wird gerade von einem anderen Benutzer verwendet, bitte prüfen Sie ob die Datei unter - Serverort - vorhanden ist und versuchen Sie es in ein paar Minuten wieder!.")

            'Finally

            ' xlsapp.Workbooks.Close()

        End Try


    End Sub

End Class

Edit:

Bitte kein Ton von wegen Namenskonventionen, ich hasse das schon in Java... das ist vorerst Nebensache!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sooo, bissl längere Verzögerung diesmal ...

http://forum.fachinformatiker.de/hardware/126782-p5q-pro-e8400-bios-screen-haengt.html

Ich Frage mich gerade, wo du deine ListBox füllst.

Anbei mein 'Testprojekt' wo es alles soweit funzt.

Einfach eine Simple Form mit TextBox,Button und ListBox

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

        Me.ListBox1.DataSource = Me.DataSet21.Prozessdaten_2641

        Me.ListBox1.DisplayMember = "SAP-Nr"

        Me.ListBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))

        Me.ListBox1.ItemHeight = 16

        Me.ListBox1.Location = New System.Drawing.Point(24, 72)

        Me.ListBox1.Name = "ListBox1"

        Me.ListBox1.RightToLeft = System.Windows.Forms.RightToLeft.No

        Me.ListBox1.Size = New System.Drawing.Size(168, 36)

        Me.ListBox1.TabIndex = 1

Das habe ich in der Form angeklickt, deshalb steht es nicht direkt in meinem eigenen Code drin.

Zwischenzeitlich habe ich ein komplett neues Projekt gemacht, eine Form, eine ListBox und ein textfeld mit demselben Code... naja, was soll ich sagen, da kommt ernsthaft dieselbe Meldung...

Übrigens ne nette neue CPU, hab dieselbe, wunderbar um gut hochzutakten :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok ... da haben wir ja schon das Prob ...

Du füllst es ja über ein DS. Dadurch enthält deine Listbox natürlich nicht Objekte des Typs String (wie bei mir), sondern vom Typ DataRowView ...

Nun musst du natürlich aus diesem DataRowView einen String holen.

Wie genau weiß ich gerade nid ...

Glaube aber via item.Item(id(bzw.name)) der spalte

Edit: joa deswegen hab ich mir die auch geholt :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

ganz genau so: :old

keine ahnung was heute los ist, es klappt einfach gar nichts.

und ich hab langsam auch keine ahnung mehr wie ich das lösen soll

item hat nur die methode gettype

es kann doch nicht sein, dass es so unendlich kompliziert ist diesen wert aus der Listbox rauszugekommen...

Danke für deinen Beistand!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab das jetzt mal so probiert:

        

For Each item As DataRowView In ListBox1.Items

TextBox1.Text = item.Item(ListBox1.SelectedIndex)

Next

"Eine nicht behandelte Ausnahme des Typs 'System.IndexOutOfRangeException' ist in system.windows.forms.dll aufgetreten.

Zusätzliche Informationen: Spalte -1 wurde nicht gefunden."

Das ist in Private Sub ListBox1_SelectedIndexChanged

Wenn ich es dahin mache wo es eigentlich gehört, also in das Button-Events dann kommt diese Fehlermeldung:

"Eine nicht behandelte Ausnahme des Typs 'System.InvalidCastException' ist in microsoft.visualbasic.dll aufgetreten.

Zusätzliche Informationen: Ungültige Konvertierung von Typ 'DBNull' in Typ 'String'."

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das war beinahe die Lösung!!!!

Jetzt zeigt es mir in dem Textfeld ein "x" an, hab ne weile gerätzelt, dann ist mir aufgefallen das dieses x als weiteres Feld in meinem DataSet drinsteht, allerdings wird es in der ListBox nicht angezeigt, da steht nur eine Nummer.

Was mache ich jetzt denn schon wieder falsch??

Edit:

AHHHHHH ich hab die Lösung!!!!!!!!!!!

Code:

For Each item As DataRowView In ListBox1.SelectedItems

TextBox1.Text = item.Item("SAP-Nr")

Next

2 Tage für diese Zeile...

Danke Dominik, ohne dich wäre ich ganz sicher verzweifelt!!!

Edit 2:

Jetzt habe ich mir meinen Feierabend aber sowas von verdient! ;)

Bearbeitet von informatikerin86
Link zu diesem Kommentar
Auf anderen Seiten teilen

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