如何在C#中制作字体组合框?

如何在C#中制作字体组合框?

问题描述:

我想在ac#.NET 4.5 Windows窗体应用程序(注意:不是WPF)中制作一个组合框,它显示系统中所有truetype安装的字体,并且每个字体都用它表示的字体进行格式化(“Times”时间,Arial格式的字符等)。如何在C#中制作字体组合框?

如何做到这一点?

+0

在客户端系统? –

+0

是的,在客户端系统 –

+0

我不认为你可以显示客户端的字体出于阻止你管理用户文件的相同原因 –

使用ComboBox.DrawItem事件处理程序。

public YourForm() 
{ 
    InitializeComponent(); 

    ComboBoxFonts.DrawItem += ComboBoxFonts_DrawItem;   
    ComboBoxFonts.DataSource = System.Drawing.FontFamily.Families.ToList(); 
} 

private void ComboBoxFonts_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    var comboBox = (ComboBox)sender; 
    var fontFamily = (FontFamily)comboBox.Items[e.Index]; 
    var font = new Font(fontFamily, comboBox.Font.SizeInPoints); 

    e.DrawBackground(); 
    e.Graphics.DrawString(font.Name, font, Brushes.Black, e.Bounds.X, e.Bounds.Y); 
} 

对于使用ComboBox.DrawItem你需要设置ComboBox.DrawMode = DrawMode.OwnerDrawFixed

您可以使用System.Drawing.FontFamily.Families,像这样

List<string> fonts = new List<string>(); 

foreach (FontFamily font in System.Drawing.FontFamily.Families) 
{ 
    fonts.Add(font.Name); 
} 

.................. your logic 
+0

是的,但这样做,我只会有字体的名称。 The'll not格式化 –

+0

@AleTheFe你可以使用该名称来查找字体虽然...唯一的问题是,经常组合框不会为每个项目采取字体(据我所知) – EpicKip

+0

@EpicKip这是正是我到目前为止所想:'( –

您可以通过前在这里下一个项目发表几年实现这一目标,https://www.codeproject.com/Articles/318174/Creating-a-WYSIWYG-font-ComboBox-using-Csharp

但不是这样做,你可以按照Narek Noreyan的步骤和增加更多,使用丰富的文本框,其文本字体将从组合框中选择一个字体家庭后更改。

一些代码片段在这里,

using System.Drawing.Text; 
void mainformload(object sender, EventArgs s) 
{ 
    InstalledFontCollection inf=new  InstalledFontCollection(); 
    foreach(Font family font in inf.Families) 
     combobox.Items.Add(font.Name); //filling the font name 
    //get the font name of the rich text box text 
    combobox.Text=this.richtextbox.Font.Name.ToString(); 
    } 
void comboboxselectionchanged(object sender, EventArgs e) 
{ 
    richtextbox.Font=new Font(combobox.text, richtextbox.Font.Size); 
}