我有简单的ListBox
,我想在所有可用的字体中绘制简单的text
,以便选择我喜欢的字体:
ListBox lb;
foreach (FontFamily font in System.Drawing.FontFamily.Families)
{
Font f = new Font(font, 15);
lbFonts.Items.Add(f.Name + ": " + "11");
}
目前我的ListBox
都使用相同的字体。
答案 0 :(得分:1)
您可以简单地将Font本身添加到列表中(或创建一个类,为字体和大小添加属性并覆盖ToString() - 方法ti获取样本中的文本)。
这样您就可以使用方法used here
为初始化添加以下行:
this.listBox1.DrawMode = DrawMode.OwnerDrawFixed;
this.listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(listBox1_DrawItem);
listBox1.ItemHeight = 20;
InstalledFontCollection installedFontCollection = new InstalledFontCollection();
foreach (FontFamily fontFamily in installedFontCollection.Families)
{
FontListItem item = new FontListItem(fontFamily, 10);
listBox1.Items.Add(item);
}
DrawItem-Method:
void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
FontListItem item = (FontListItem)listBox1.Items[e.Index];
e.Graphics.DrawString(item.ToString(), item.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault);
}
将Font添加到ListBox的示例类:
private class FontListItem
{
public int Size { get; private set; }
public Font Font { get; private set; }
public FontListItem(FontFamily family, int size)
{
Font = new Font(family, size);
Size = size;
}
public override string ToString()
{
if(Font != null)
return Font.Name + ": " + Size;
return "[none]: " + Size;
}
}
您应该得到类似于此的输出:
答案 1 :(得分:0)
我相信你真正的问题是:
如何枚举.NET中所有已安装的字体?
Microsoft has written a How-To。它的核心是使用InstalledFontCollection来获取所有字体系列:
InstalledFontCollection installedFontCollection = new InstalledFontCollection();
// Get the array of FontFamily objects.
FontFamily[] fontFamilies = installedFontCollection.Families;
重复此操作以填充列表框。请注意,从UI的角度来看,这是一种可怕的方法,没有某种形式。此外,许多用户喜欢看到该字体的样本,但是使用字体的名称作为样本会损害UI,因为有许多象形字体(Zapf Dingbats,Wingdings等)可以'以有用的方式呈现自己的名字。