这是我的代码:
private void DialogFont_Load(object sender, EventArgs e)
{
LoadInstalledFonts();
}
private void LoadInstalledFonts()
{
var fontCollection = new System.Drawing.Text.InstalledFontCollection();
foreach (var font in fontCollection.Families)
{
lstFonts.Items.Add(font.Name);
}
}
如何使用自己的设计显示每种字体,有点像字体的预览?我正在使用ListBox控件列出字体。
答案 0 :(得分:1)
也许选择ListView
代替ListBox
? ListViewItem
类型具有您可以使用的Font
属性。我不知道ListBox
的任何特殊的每项项目格式化功能。
更新:如果您还在处理此问题,here's a snippet of some code that worked for me(这不会按原样编译,因为它只是来自较大用户控件的剪辑;我是确定你能弄清楚究竟发生了什么):
private void PopulateListView(IEnumerable<FontFamily> fontFamilies)
{
try
{
m_listView.BeginUpdate();
float fontSize = m_listView.Font.Size;
Color foreColor = m_listView.ForeColor;
Color backColor = m_listView.BackColor;
string sampleText = m_sampleText;
foreach (FontFamily fontFamily in fontFamilies)
{
var listViewItem = new ListViewItem(fontFamily.Name)
{
UseItemStyleForSubItems = false
};
var sampleSubItem = new ListViewItem.ListViewSubItem(listViewItem, sampleText, foreColor, backColor, new Font(fontFamily, fontSize));
listViewItem.SubItems.Add(sampleSubItem);
m_listView.Items.Add(listViewItem);
}
}
finally
{
m_listView.EndUpdate();
}
}
结果如下:
答案 1 :(得分:1)
您可以在WPF中轻松完成。
XAML看起来像:
<ComboBox Width="100" Height="30" x:Name="FontSelector">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" FontFamily="{Binding}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
和C#codebehind:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
FontSelector.ItemsSource = Fonts.SystemFontFamilies;
}
您还可以在CodeProject上查看本文,该文章介绍了(在Winforms示例中)如何使用您想要的字体填充列表框:http://www.codeproject.com/KB/selection/FontListBoxAndCombo.aspx
答案 2 :(得分:1)
首先,我想确保您了解FontDialog控件,并且您特意想要创建自定义字体对话框。如果你不了解它,那么也许你可以看看它,并确保它不符合你的需求,然后再尝试创建自己的。以下Stack Overflow question向您展示了如何确保它填充了所有设备字体而不仅仅是TrueType字体。
现在,如果您仍想创建自己的,那么以下是一个简化的解决方案:
在“字体”对话框中添加标签,并将其文本设置为您希望用户将其视为字体样本的任何内容。像AabBcC
这样的东西,或者它甚至可以是一个随机的句子。
您可以在ListBox的SelectedIndexChanged事件中设置标签的Font。这实际上会更改示例文本以匹配您指定的字体。以下是一个简单的例子:
请注意,如果您希望用户指定要以其他字体查看的文本,也可以使用文本框。此外,Andy和Aharomi等一些字体会抛出一个ArgumentException,声明Font不支持常规样式,因此捕获此异常类型是明智的。
private void lstFonts_SelectedIndexChanged(object sender, EventArgs e)
{
lblSample.Font = new Font(lstFonts.SelectedItem.ToString(), 12);
}
答案 3 :(得分:0)
使用ListBox,我认为你需要做主人画。绘制每个列表项时,您需要选择该项的字体。