コンボボックスのなかに使用できるフォントを表示させてみます。
まずインストールされているフォントを列挙するだけならこれでOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
List<string> GetFonts() { List<string> ret = new List<string>(); // 使用できるFontFamily配列を取得 FontFamily[] fontFamilies = FontFamily.Families; //FontFamilyの名前を列挙する foreach (FontFamily fontFamily in fontFamilies) { if (fontFamily.IsStyleAvailable(FontStyle.Regular)) ret.Add(fontFamily.Name); } return ret; } |
FontFamily.FamiliesとやればFontFamilyの配列が取得できます。あとはforeach文でリストに格納して返すだけです。
1 2 3 |
List<string> fonts = GetFonts(); foreach (string s in fonts) comboBox1.Items.Add(s); |
とやれば、コンボボックスのなかにフォントを追加することができますが、これだけでは面白くないのでどんなフォントなのかわかるようなものをつくってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
class ComboBoxEx : ComboBox { public ComboBoxEx() { DrawMode = DrawMode.OwnerDrawFixed; //オーナードローを指定 ItemHeight = 20; //項目の高さを設定 List<string> a = GetFonts(); foreach (string s in a) Items.Add(s); DropDownHeight = 300; } protected override void OnDrawItem(DrawItemEventArgs e) { //背景を描画する e.DrawBackground(); //項目に表示する文字列 string txt = e.Index > -1 ? Items[e.Index].ToString() : Text; //使用するフォント Font f = new Font(txt, Font.Size); //使用するブラシ Brush b = new SolidBrush(e.ForeColor); //文字列を描画する float ym = (e.Bounds.Height - e.Graphics.MeasureString(txt, f).Height) / 2; e.Graphics.DrawString(txt, f, b, e.Bounds.X, e.Bounds.Y + ym); f.Dispose(); b.Dispose(); } public List<string> GetFonts() { List<string> ret = new List<string>(); // 使用できるFontFamily配列を取得 FontFamily[] fontFamilies = FontFamily.Families; //FontFamilyの名前を列挙する foreach (FontFamily fontFamily in fontFamilies) { if (fontFamily.IsStyleAvailable(FontStyle.Regular)) ret.Add(fontFamily.Name); } return ret; } } |
SelectionChangeCommittedイベントを使えば選択したフォントを反映させることができます。
1 2 3 4 5 6 7 |
public partial class SyncRichTextBox : UserControl { private void ComboBox1_SelectionChangeCommitted(object sender, EventArgs e) { syncRichTextBox1.SelectionFontName = comboBox1.SelectedItem.ToString(); } } |