9

我想在我的 ListBox 中有多列。下面是我在应用程序中获得的图片示例。

没有多列的 ListBox 的图片

我实际上有大约 7 列,但为了便于理解,只打印了两列。

所以,第一列会说date,第二列会说name。如您所见,数据没有进入它们自己的列。

这是我的代码:

this.listBox1 = new System.Windows.Forms.ListBox();
this.SuspendLayout();
// 
// listBox1
// 
this.listBox1.FormattingEnabled = true;
this.listBox1.HorizontalScrollbar = true;

foreach (XmlNode xn in xnList)
{
    string date = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "Date").FirstChild.Value;
    string id = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "ID").FirstChild.Value;
    if (date == cari)
    {
        this.listBox1.Items.AddRange(new object[] {                    
        //dateBox.Text,
        dateBox.Text + "\r\n" + date});

        this.listBox1.Items.AddRange(new object[] {                    
        "sarabrown"});
    }
}
this.listBox1.Location = new System.Drawing.Point(12, 28);
this.listBox1.MultiColumn = true;
this.listBox1.Name = "listBox1";
this.listBox1.ScrollAlwaysVisible = true;
this.listBox1.Size = new System.Drawing.Size(300, 95);
this.listBox1.TabIndex = 0;
this.listBox1.ColumnWidth = 100;
// 
// Form3
// 
this.ClientSize = new System.Drawing.Size(400, 273);
this.Controls.Add(this.listBox1);
this.Name = "Form3";
this.ResumeLayout(false);

我在那里找到了这段代码,但它创建了一个列表框,看起来就像上图所示。有人知道吗?

4

4 回答 4

8

only的MultiColumn属性ListBox有助于避免垂直滚动,因此只会将溢出的项目堆叠到下一列中。默认情况下,您的要求在 .NET 中不可用。因此,您可能必须构建自己的自定义控件来支持它。

顺便说一句,GridView是你的朋友。你需要的东西很容易使用GridView. 例如,为了使其简单化(您可能必须完全调整它以适应您的问题)

protected void MyGridView_PreRender(object sender, EventArgs e)
{
    DataSet myDataSet = new DataSet();
    myDataSet.ReadXml(new StringReader(myXmlDoc.OuterXml));
    GridView gv = (GridView)sender;
    gv.DataSource = myDataSet;
    gv.DataBind();
}

更新:

您可能想要签出ListView而不是GridViewor ListBox。它比 a 相对轻量级GridView

ListView您还可以在不同的列中添加其他控件,例如复选框。

检查这个例子给你一个想法。
或者这个更简单:在 C# 中使用 ListView 控件

于 2012-08-09T05:00:26.347 回答
0

我认为您误解了 ListBox 中 MultiColumn 属性的用法。

来自 MSDN:

多列 ListBox 将项目放置到所需的尽可能多的列中,以使垂直滚动变得不必要。

所以这只是避免滚动的事情。

如果您想在每列上显示几列和单独的数据,我建议您使用ListView

于 2018-08-28T11:38:12.077 回答
0

对于 C# 中 ListBox 中的 MutliColumn,这工作正常

listBox1.Items.AddRange(
    new object[]
    {
        "Name","Aman"

    }
);
于 2015-11-09T05:40:21.663 回答
-2

我已经能够创建一个代码,以便我可以从 Excel 中的电子表格中订购任何年份范围内的日期。

Private Sub UserForm_Initialize()

 With Me

       .StartUpPosition = 0
        '.Width = Application.Width * 0.46
        '.Height = Application.Height * 0.57
        .Left = Application.Left + (Application.Width * 0.7) \ 2
        .Top = Application.Top + (Application.Height * 0.3) \ 2

 End With

End Sub

Private Sub CommandButton1_Click()

initialize ("lth") 'Call rutine "initialize" to order listbox from down to up

End Sub

Private Sub CommandButton2_Click()

initialize ("htl") 'Call rutine "initialize" to order listbox from up to down

End Sub

Sub initialize(ByVal ordertype As String)

Dim x As Integer
Dim i As Integer
Dim fechas As Date
Dim datofecha As String
Dim arrayyear() As Date
Dim diasmesbisiesto(1 To 12) As Integer
Dim diasmesnobisiesto(1 To 12) As Integer
Dim lastrow As Integer
Dim mayoryear As Integer
Dim menoryear As Integer
Dim f As Integer
Dim c As Date

lastrow = Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row

ReDim arrayyear(lastrow)

For u = 1 To lastrow

arrayyear(u) = Format(Sheet1.Cells(u, 1).Value, "dd/mm/yyyy")

Next u



'-------------------------
'Obtener mayor valor fecha
'-------------------------
Dim vm As Integer
Dim maxindex As Integer

maxindex = 1

For vm = 2 To UBound(arrayyear) 'suponemos indice desde 1 a n
If arrayyear(vm) > arrayyear(maxindex) Then
maxindex = vm
End If
Next

mayor = arrayyear(maxindex)
'-------------------------



'-------------------------
'Obtener menor valor fecha
'-------------------------
Dim vn As Integer
Dim minindex As Integer

minindex = 1

For vn = 2 To UBound(arrayyear) 'suponemos indice desde 1 a n
If arrayyear(minindex) < arrayyear(vn) Then

Else
minindex = vn
End If

Next

menor = arrayyear(minindex)
'-------------------------


menoryear = Year(menor) ' Asign the lowest year in menoryear
mayoryear = Year(mayor) ' Asign the highest year in mayoryear
ListBox1.Clear

'Carga vector diasmesbisiesto
'---------------------------
diasmesbisiesto(1) = 31
diasmesbisiesto(2) = 29
diasmesbisiesto(3) = 31
diasmesbisiesto(4) = 30
diasmesbisiesto(5) = 31
diasmesbisiesto(6) = 30
diasmesbisiesto(7) = 31
diasmesbisiesto(8) = 31
diasmesbisiesto(9) = 30
diasmesbisiesto(10) = 31
diasmesbisiesto(11) = 30
diasmesbisiesto(12) = 31
'---------------------------

'Carga vector diasmesnobisiesto
'---------------------------
diasmesnobisiesto(1) = 31
diasmesnobisiesto(2) = 28
diasmesnobisiesto(3) = 31
diasmesnobisiesto(4) = 30
diasmesnobisiesto(5) = 31
diasmesnobisiesto(6) = 30
diasmesnobisiesto(7) = 31
diasmesnobisiesto(8) = 31
diasmesnobisiesto(9) = 30
diasmesnobisiesto(10) = 31
diasmesnobisiesto(11) = 30
diasmesnobisiesto(12) = 31
'---------------------------

f = 0 'Variable para ubicar la ubicacion de la fila en donde se guardaran los datos en el listbox
cuenta = 0 ' Variable para contar la cantidad de elementos que se cargaron en el listbox

If ordertype = "lth" Then

 GoTo 1 ' Ordering lowest to highest


End If

If ordertype = "htl" Then

 GoTo 2 ' Ordering highest to lowest

End If

'---------------------------
' Ordering lowest to highest
'---------------------------
1:

For anio = menoryear To mayoryear

    For mes = 1 To 12

            If (anio Mod 4 = 0 And anio Mod 100 <> 0 Or anio Mod 400 = 0) Then

                 ' Años bisiestos
                 diasmes = diasmesbisiesto(mes)

            Else

                 ' Años no bisiestos
                 diasmes = diasmesnobisiesto(mes)

            End If

            datofecha = Format(DateSerial(anio, mes, 1), "dd/mm/yyyy")

            fechas = datofecha

            'Carga del listbox
            '------------------------------------------------------------------------------------------------------------
                For x = 0 To diasmes - 1

                        For i = 1 To lastrow
                        c = fechas
                        If Format(Sheet1.Cells(i, 1), "dd/mm/yyyy") = c + x Then

                            Me.ListBox1.AddItem


                           Me.ListBox1.List(f, 0) = Format(Sheet1.Cells(i, 1), "dd/m/yyyy")
                           cuenta = cuenta + 1
                            For b = 1 To 1

                             Me.ListBox1.List(f, b) = Sheet1.Cells(i, b + 1)

                            Next b
                            f = f + 1
                        End If

                        Next i

                Next x
             '------------------------------------------------------------------------------------------------------------
    Next mes

Next anio

Label2.Caption = "Number of Elements: " & cuenta
Label3.Caption = "Order from Lowest to Highest "

Exit Sub

'---------------------------
' Ordering highest to lowest
'---------------------------
2:

For anio = mayoryear To menoryear Step -1

    For mes = 12 To 1 Step -1

            If (anio Mod 4 = 0 And anio Mod 100 <> 0 Or anio Mod 400 = 0) Then

                 ' Años bisiestos
                 diasmes = diasmesbisiesto(mes)

            Else

                 ' Años no bisiestos
                 diasmes = diasmesnobisiesto(mes)

            End If

            datofecha = Format(DateSerial(anio, mes, diasmes), "dd/mm/yyyy")

            fechas = datofecha

            'Carga del listbox
            '------------------------------------------------------------------------------------------------------------
                For x = 0 To diasmes - 1

                        For i = 1 To lastrow
                        c = fechas
                        If Format(Sheet1.Cells(i, 1), "dd/mm/yyyy") = c - x Then

                            Me.ListBox1.AddItem


                           Me.ListBox1.List(f, 0) = Format(Sheet1.Cells(i, 1), "dd/m/yyyy")
                           cuenta = cuenta + 1
                            For b = 1 To 1

                             Me.ListBox1.List(f, b) = Sheet1.Cells(i, b + 1)

                            Next b
                            f = f + 1
                        End If

                        Next i

                Next x
             '------------------------------------------------------------------------------------------------------------
    Next mes

Next anio

Label2.Caption = "Number of Elements: " & cuenta
Label3.Caption = "Order from Highest to Lowest "

Exit Sub

End Sub
于 2020-04-09T00:12:49.857 回答