2016-04-22 14 views
0

Was ich suche ist ein Listenfeld, das mehrere Spalten hat, zum Beispiel ein Listenfeld für Bücher, wo jede Zeile einen Titel, Preis, Autor haben würde.Wie genau erstelle ich eine mehrspaltige Listbox in Visual Basic?

Bonuspunkte für jeden, der mir einige Hinweise geben kann, wie genau ich auch Gegenstände zur Liste hinzufügen kann. Im raten

listBox1.Items.Add ("Harry Potter", "JK Rowling", 5.99);

funktioniert nicht?

Antwort

0

Ich habe, bevor sie in die gleiche Frage laufen und wandte sich stattdessen Listviews. Etwas wie:

Public Class Form1 
Public Sub New() 

    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 
    Dim lv As New ListView 
    With lv 
     .View = View.Details 
     .FullRowSelect = True 
     .Columns.Add("Title") 
     .Columns.Add("Author") 
     .Columns.Add("Price") 
    End With 

    Me.Controls.Add(lv) 
    lv.Dock = DockStyle.Fill 

    lv.Items.Add(New ListViewItem({"Harry Potter", "J.K. Rowling", 5.99})) 
End Sub 
End Class 
2

Sie benötigen Eigenschaft ändern:

Me.listBox1.MultiColumn = True 

hinzufügen single:

listBox1.Items.Add("Item") 

hinzufügen multi:

With Me.listBox1 
    Me.listBox1.ColumnCount = 2 
    .AddItem 
    .List(i, 0) = "something for first column" 
    .List(i, 1) = "something for second column" 
    i = i + 1 
end with 

Weitere Infos zu listbox 12

Jetzt sollten Sie wirklich Listview verwenden:

'Add Three Columns To ListView 2 
    ListView2.Columns.Add("Zodiac", 100, HorizontalAlignment.Center) 'Column 1 
    ListView2.Columns.Add("From", 100, HorizontalAlignment.Left) 'Column 2 
    ListView2.Columns.Add("To", 100, HorizontalAlignment.Right) 'Column 3 

    'Show Small Images Next To Zodiac Sign 
    ListView2.SmallImageList = ImageList2 

    'Declare Array For ListView Items 
    Dim arrLVItem(11) As ListViewItem 

    Dim j As Integer 'Loop Counter 

    'Loop Through Each ListViewItem Array Item 
    For j = 0 To arrLVItem.Length - 1 

     'Initialize ListViewItem Array 
     arrLVItem(j) = New ListViewItem 

     'Add Text To First ListView Item - The Zodiac Sign 
     arrLVItem(j).SubItems(0).Text = arrZodiac(j) 

     'Add From and To SubItems On Zodiac ListView Item 
     arrLVItem(j).SubItems.Add(arrFrom(j)) 
     arrLVItem(j).SubItems.Add(arrTo(j)) 

     'Connect ListView Item With Its Associated Picture 
     arrLVItem(j).ImageIndex = j 

    Next j 

    'Add Completed Arrays To [ListView][3] 
    ListView2.Items.AddRange(arrLVItem) 
+2

Nein nein. Laut Microsoft * "Eine mehrspaltige ListBox platziert Elemente in so viele Spalten, wie für ein vertikales Scrollen erforderlich sind." *. Die [ListBox.MultiColumn-Eigenschaft] (https://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.multicolumn%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396) macht die ListBox nicht zu einer Art Raster. –

1

Sie können jede Art von Objekt hinzufügen Boxen aufzulisten. Erstellen Sie eine Klasse, die die gewünschten Eigenschaften enthält, und überschreiben Sie die ToString-Methode. Das Listenfeld verwendet es, um die Elemente anzuzeigen.

Public Class Book 
    Public Property Title As String 
    Public Property Author As String 
    Public Property Price As Decimal 

    Public Overrides Function ToString() As String 
     Return String.Format("{0} by {1} at {2:c}", Title, Author, Price) 
    End Function 
End Class 

Dann

Dim p = New Person With {.Title = "Harry Potter", .Author = "JK Rowling", Price = 5.99D} 
listBox1.Items.Add(p) 
0
Me.ListBox1 = New System.Windows.Forms.ListBox() 
    Me.SuspendLayout() 
    ' 
    ' listBox1 
    ' 
    Me.ListBox1.FormattingEnabled = True 
    Me.ListBox1.HorizontalScrollbar = True 
    Me.ListBox1.Items.AddRange(New Object() {"Item 1, column 1", "Item 2, column 1", "Item 3, column 1", "Item 4, column 1", "Item 5, column 1", "Item 1, column 2", "Item 2, column 2", "Item 3, column 2"}) 
    Me.ListBox1.Location = New System.Drawing.Point(0, 0) 
    Me.ListBox1.MultiColumn = True 
    Me.ListBox1.Name = "listBox1" 
    Me.ListBox1.ScrollAlwaysVisible = True 
    Me.ListBox1.Size = New System.Drawing.Size(120, 95) 
    Me.ListBox1.TabIndex = 0 
    Me.ListBox1.ColumnWidth = 85 
    ' 
    ' Form1 
    ' 
    Me.ClientSize = New System.Drawing.Size(292, 273) 
    Me.Controls.Add(ListBox1) 
    Me.Name = "Form1" 
    Me.ResumeLayout(False) 
End Sub 
+0

übrigens - ich würde keine Listbox verwenden, ich würde ein Datagrid verwenden, aber es hängt davon ab, was Sie tun möchten ...... –