informatikerin86 Geschrieben 21. April 2009 Geschrieben 21. April 2009 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... Zitieren
DominikJ Geschrieben 21. April 2009 Geschrieben 21. April 2009 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 Zitieren
informatikerin86 Geschrieben 21. April 2009 Autor Geschrieben 21. April 2009 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. Zitieren
Kati82 Geschrieben 21. April 2009 Geschrieben 21. April 2009 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 Zitieren
DominikJ Geschrieben 21. April 2009 Geschrieben 21. April 2009 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 Zitieren
informatikerin86 Geschrieben 21. April 2009 Autor Geschrieben 21. April 2009 @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 Zitieren
Guybrush Threepwood Geschrieben 21. April 2009 Geschrieben 21. April 2009 @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. Zitieren
DominikJ Geschrieben 21. April 2009 Geschrieben 21. April 2009 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 Zitieren
informatikerin86 Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 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 Zitieren
DominikJ Geschrieben 22. April 2009 Geschrieben 22. April 2009 Morjen Simone... Ja Rum nehm ich auch. Sollte aber eigentlich mal Ruhm werden 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 Zitieren
informatikerin86 Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 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!!! Zitieren
DominikJ Geschrieben 22. April 2009 Geschrieben 22. April 2009 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 Zitieren
informatikerin86 Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 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 Zitieren
DominikJ Geschrieben 22. April 2009 Geschrieben 22. April 2009 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 Zitieren
informatikerin86 Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 Warum kann VB.net nicht einfach Java sein?? ich glaub ich geh heim und begrabe mich... Zitieren
DominikJ Geschrieben 22. April 2009 Geschrieben 22. April 2009 Joa, schade eigentlich nicht wahr ... Hat nicht geklappt oder doch? Meinste in etwa so: :old ? Zitieren
informatikerin86 Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 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! Zitieren
DominikJ Geschrieben 22. April 2009 Geschrieben 22. April 2009 Hey, item hat nur die Methode gettype weil es sich um ein object handelt. Du kannst nun natürlich auch item direkt 'as DataRowView' deklarieren. Zitieren
informatikerin86 Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 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'." Zitieren
DominikJ Geschrieben 22. April 2009 Geschrieben 22. April 2009 Müsste auch eher TextBox1.Text = item.Item(0) heissen... die 0 Steht für den index der spalte in der sich die Daten befinden. Zitieren
informatikerin86 Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 Das habe ich zuerst versucht, dann steht auch ernsthaft eine Zahl in meinem Textfeld drin, also eine aus der Datenbank, blöderweise immer dieselbe..nämlich die letzte in der Liste Zitieren
informatikerin86 Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 Eigentlich auch logisch, da ich nirgends sage er soll mir das ausgeben das ausgewählt wurde... aber genau das war doch mein Problem... Zitieren
DominikJ Geschrieben 22. April 2009 Geschrieben 22. April 2009 Ich hab das jetzt mal so probiert: For Each item As DataRowView In ListBox1.Items TextBox1.Text = item.Item(ListBox1.SelectedIndex) Next Da fällt mir auf du musst da natürlich wie auf der ersten Seite beschrieben selecteditems nutzen. Zitieren
informatikerin86 Geschrieben 22. April 2009 Autor Geschrieben 22. April 2009 (bearbeitet) 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 22. April 2009 von informatikerin86 Zitieren
Guybrush Threepwood Geschrieben 22. April 2009 Geschrieben 22. April 2009 Wobei dann natürlich wenn in der ListBox mehrere Items ausgewählt sein sollten nur der Text des letzten Items in der TextBox steht. 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.