为一个多列列表框设置不同的列宽

Set different columnwidth for one Multicolumn Listbox

我正在寻找一种方法来在我的多列列表框中设置不同的列宽。第一个应该是0所以它会被隐藏,第二个15,第三个85,等等

我的目标是创建一个引用产品的列表框,我的用户可以从中点击 select 此类产品,然后使用按钮对所述产品执行不同的操作

列表框从 MySQL 数据库中获取数据

你可以制作一个class来存储你的数据。您可以根据需要添加任意数量的属性以匹配数据库中的字段 table。我添加了一个自定义构造函数来简化创建新产品时的属性设置。我已经覆盖了 .ToString,因为列表框在要添加的对象上调用 .ToString。

Public Class Product
    Public Property ProductName As String
    Public Property Price As Decimal
    Public Sub New(Name As String, ProductPrice As Decimal)
        ProductName = Name
        Price = ProductPrice
    End Sub
    Public Overrides Function ToString() As String
        Return ProductName
    End Function
End Class 

创建一个表单级列表变量来保存您的产品数据列表。 检索数据并将每条记录存储在列表中。

Private lstProduct As New List(Of Product)
Private Sub GetData()
    Using cn As New MySqlConnection("Your connection string")
        Using cmd As New MySqlCommand("Select * From Products;", cn)
            cn.Open()
            Using dr As MySqlDataReader = cmd.ExecuteReader
                While dr.Read
                    Dim p As New Product(dr.GetString(0), dr.GetDecimal(1))
                    lstProduct.Add(p)
                End While
            End Using
        End Using
    End Using
End Sub

获取数据后,您可以将列表用作 ListBox 的 .DataSource。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    GetData()
    ListBox2.DataSource = lstProduct
End Sub

现在您在列表框中拥有可用的产品的所有属性。

Private Sub ListBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox2.SelectedIndexChanged
    Dim p As Product = DirectCast(ListBox2.SelectedItem, Product)
    Dim ProductPrice As Decimal = p.Price
    Debug.Print(ProductPrice.ToString)
End Sub