像这样的3D数组
.filter "scFilter", () ->
(collection, search) ->
if search
regexp = createAccentRegexp(search)
doesMatch = (txt) ->
(''+txt).match(regexp)
collection.filter (el) ->
if typeof el == 'object'
return true for att, value of el when (typeof value == 'string') && doesMatch(value)
doesMatch(el)
false
else
collection
第一个维度是字体名称,第二个维度是普通样式的True Type字体文件,第三个维度是粗体样式的True Type字体文件
我想用字体名称(第一维)填充组合框
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"}
}
我收到错误: "索引数小于索引数组的维数"
即使我使用
For index0 = 0 To MyFonts.GetUpperBound(0)
'Add all the Fonts names to a Combobox
myCombobox.Items.Add(MyFonts(index0))
Next
答案 0 :(得分: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
这个名称与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
我会以不同的方式构建数据,但这可以让您使用所拥有的数据。无需将数据复制到控件中,SelectedItem
将为FontItem
(在Object
内)。在SelectedValueChanged
事件中:
Dim item = DirectCast(cbox1.SelectedValue, FontItem)
Console.WriteLine("For {0}, TTF = {1}, bold = {2}", item.Name,
item.TTFile,
item.TTBoldFile)
答案 1 :(得分:4)
你有一个2D数组。该数组的索引类似于
并且在索引时,返回的值是一个字符串。
考虑以下数组,即3D
您的原始信息实际上只有1D,因为每个元素对应一种字体。现在,如果您有相同字体的副本,即Arial两次,但使用不同的ttf文件,那么您有两个逻辑维度的信息。
您可以使用以下代码测试这些不同的尺寸。索引器在最后
Sub Main()
Dim MyFonts2D =
{
{"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"}
}
Dim MyFonts3D =
{
{
{"Arial", "arial1.ttf", "arialbd1.ttf"},
{"Arial", "arial2.ttf", "arialbd2.ttf"},
{"Arial", "arial3.ttf", "arialbd3.ttf"}
},
{
{"Calibri", "Calibri1.ttf", "Calibribd1.ttf"},
{"Calibri", "Calibri2.ttf", "Calibribd2.ttf"},
{"Calibri", "Calibri3.ttf", "Calibribd3.ttf"}
},
{
{"Candara", "Candara1.ttf", "Candarabd1.ttf"},
{"Candara", "Candara2.ttf", "Candarabd2.ttf"},
{"Candara", "Candara3.ttf", "Candarabd3.ttf"}
}
}
Console.WriteLine("Enter first index")
Dim i = Integer.Parse(Console.ReadLine())
Console.WriteLine("Enter second index")
Dim j = Integer.Parse(Console.ReadLine())
Console.WriteLine("Enter third index")
Dim k = Integer.Parse(Console.ReadLine())
Dim a = MyFonts2D(i, j)
Console.WriteLine(a)
Dim b = MyFonts3D(i, j, k)
Console.WriteLine(b)
Console.ReadLine()
End Sub