3D数组循环并获取第一个维度值

fed*_*eka 1 .net vb.net arrays

像这样的3D数组

Dim MyFonts = 
    {
        {"Arial", "arial.ttf", "arialbd.ttf"}, 
        {"Calibri", "calibri.ttf", "calibribd.ttf"},
        {"Candara", "Candara.ttf", "Candarab.ttf"}, 
        {"Comic Sans MS", "comic.ttf", "comicbd.ttf"}, 
        {"Consolas", "consola.ttf", "consolab.ttf"},
        {"Constantia", "constant.ttf", "constantb.ttf"},
        {"Courier New","cour.ttf", "courbd.ttf"},
        {"Georgia", "georgia.ttf", "georgiab.ttf"},
        {"Impact", "impact.ttf", "impact.ttf"},
        {"Palatino Linotype", "pala.ttf", "palab,ttf"},
        {"Tahoma", "tahoma.ttf", "tahomabd.ttf"},
        {"Times New Roman", "times.ttf", "timesbd.ttf"},
        {"Trebuchet MS", "trebuc.ttf", "trebucbd.ttf"},
        {"Verdana", "verdana.ttf", "verdanab.ttf"}
    }
Run Code Online (Sandbox Code Playgroud)

第一个维度是字体名称,第二个维度是普通样式的True Type字体文件,第三个维度是粗体样式的True Type字体文件

我想用字体名称(第一维)填充组合框

For index0 = 0 To MyFonts.GetUpperBound(0)
    'Add all the Fonts names to a Combobox
    myCombobox.Items.Add(MyFonts(index0))
Next
Run Code Online (Sandbox Code Playgroud)

我收到错误:"索引数小于索引数组的维数"

即使我使用

myCombobox.Items.Add(MyFonts(index0,,))
Run Code Online (Sandbox Code Playgroud)

Ňɏs*_*arp 5

类可以很容易地显示名称,但允许您从他们选择的任何内容中获取相关的TTF或粗体文件:

Public Class FontItem
    Public Property Name As String
    Public Property TTFile As String
    Public Property TTBoldFile As String
    Public Sub New(n As String, f As String, b As String)
        Name = n
        TTFile = f
        TTBoldFile = b
    End Sub

    Public Overrides Function ToString() As String
        Return Name
    End Function
End Class
Run Code Online (Sandbox Code Playgroud)

这将名称与2个文件"联系起来",使得获取相关文件变得非常容易.接下来,根据您拥有的数据创建这些内容的列表:

Dim myFonts As New List(Of FontItem)

Dim data = {{"Arial", "arial.ttf", "arialbd.ttf"},
             ...your long list
           }

For n As Int32 = 0 To data.GetUpperBound(0)
    myFonts.Add(New FontItem(data(n, 0), data(n, 1), data(n, (2))))
Next

cbox1.DataSource = myFonts
Run Code Online (Sandbox Code Playgroud)

我会以不同的方式构建数据,但这允许您使用您拥有的数据.没有必要将数据复制到控件中,SelectedItem将是一个FontItem(里面的Object).在SelectedValueChanged事件中:

Dim item = DirectCast(cbox1.SelectedValue, FontItem)
Console.WriteLine("For {0}, TTF = {1}, bold = {2}", item.Name,
                        item.TTFile,
                        item.TTBoldFile)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述在此输入图像描述

  • 适用于我的机器:D (2认同)