【问题标题】:How to make a Font Combobox in C#?如何在 C# 中制作字体组合框?
【发布时间】:2018-02-12 16:47:52
【问题描述】:

我想在 ac# .NET 4.5 Windows Forms 应用程序(注意:不是 WPF)中创建一个组合框,它显示系统上安装的所有 truetype 字体,并且每种字体都使用它所代表的字体进行格式化(“Times”格式化与 Times、“Arial” 格式为 arial 等)。

如何做到这一点?

【问题讨论】:

  • 在客户端系统上?
  • 是的,在客户端系统上
  • 我不认为您可以显示客户端的字体,原因与阻止您管理用户文件的原因相同
  • @AleTheFe - 您也可以在 Winforms 窗口中使用 WPF 组合框。

标签: c# .net winforms fonts combobox


【解决方案1】:

使用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

【讨论】:

    【解决方案2】:

    你可以使用System.Drawing.FontFamily.Families,类似这样的

    List<string> fonts = new List<string>();
    
    foreach (FontFamily font in System.Drawing.FontFamily.Families)
    {
        fonts.Add(font.Name);
    }
    
    .................. your logic
    

    【讨论】:

    • 是的,但是这样做我只会得到字体的名称。不会被格式化
    • @AleTheFe 您可以使用名称来查找字体...唯一的问题是常规组合框不会为每个项目使用字体(据我所知)
    • @EpicKip 这正是我目前所想的:'(
    • @AleTheFe 也许这个:stackoverflow.com/questions/8644007/… 就是你要找的东西
    【解决方案3】:

    您可以通过关注几年前在此处发布的项目https://www.codeproject.com/Articles/318174/Creating-a-WYSIWYG-font-ComboBox-using-Csharp

    来实现这一点

    但您可以按照 Narek Noreyan 的步骤并添加更多内容,而不是这样做,使用富文本框,在从组合框中选择字体系列后,其文本字体将被更改。

    这里有一些代码sn-p,

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多