none
VB2010のWPFフォームでフォント一覧のコンボボックスに"Arial Black"を表示させたい RRS feed

  • 質問

  • Windows7でVisualBasic2010のWPFフォームで開発を行っています。

    下記コーディングでは"Arial"のフォント名が表示されますが、"Arial Black"や"Arial Narrow"のフォント名が取得できません。

    Win32APIを使えば取得できるらしいのですが、32bit限定になってしまうので、できればWin32APIは使いたくありません。

    Word2010/Excel2010ではフォント一覧に"Arial Black"が表示されており、Word2010/Excel2010がWin32APIを使っているとは思えません。

    標準的な手法で取得する方法を教えてください。

            With Me.ComboBox1
                 .ItemsSource = Fonts.SystemFontFamilies
                .DisplayMemberPath = "Source"
                For Each Sc As FontFamily In .Items
                 Next
            End With

    よろしくお願いします。
    • 移動 ひらぽんModerator 2014年4月24日 8:10 質問が WPF 固有の問題ではないため、Visual Basic フォーラムに移動しました
    2014年4月22日 12:11

回答

すべての返信

  • InstalledFontCollection クラスを使えば、フォントファミリの一覧を取得できるようです。Arial Black や Arial Narrow の表示も確認できました。

    using System.Drawing.Text;
    using System.Linq;
    using System.Windows;
    
        /// <summary>
        /// MainWindow.xaml の相互作用ロジック
        /// </summary>
        public partial class MainWindow : Window {
            public MainWindow() {
                InitializeComponent();
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e) {
                var fonts = new InstalledFontCollection();
                this.comboBox1.ItemsSource = from font in fonts.Families orderby font.Name select font;
                this.comboBox1.DisplayMemberPath = "Name";
            }
        }

    C#ですみませんが、参考になれば幸いです。

    なおご質問はフォント一覧の表示に関することであり、WPF とは関係なく、むしろ Visual Basic の方が妥当に思われますので、解決後にVisual Basic のカテゴリに移動させて頂くことがあるかも知れません。その旨ご了承ください。


    ひらぽん http://d.hatena.ne.jp/hilapon/


    • 編集済み ひらぽんModerator 2014年4月22日 15:02 移動に関するアナウンスの追加
    • 回答の候補に設定 星 睦美 2014年4月23日 0:26
    2014年4月22日 14:57
    モデレータ
  • 表示方法はひらぽんさんが答えられているのでそれ以外の部分を…

    Win32APIを使えば取得できるらしいのですが、32bit限定になってしまうので、できればWin32APIは使いたくありません。

    誤解です。Win32 APIはWindows APIと名前が変更されています。ともかく、どちらの名前であっても64bitでも動作することにかわりありません。

    ところで質問者さんは、ただフォント名が得られればそれで満足なのでしょうか? 普通に考えれば、そのフォント名を選択された時に何らかの部位が当該フォントで描画されることが期待されていると思いますが…質問者さんのいうWin32APIを使う方法やひらぽんさんの提示された方法ではフォント名が得られるだけで、描画には使えないと思うのですが…。目的を見失っていませんか?

    加えてWindowsにおいてフォントはコントロールパネルの「フォント」で管理されていますが、Arial Blackがどこにあるかは把握されていますか? 把握されていればWPFになぜ表示されないのかわかると思うのですが。

    • 回答の候補に設定 星 睦美 2014年4月23日 0:27
    2014年4月22日 22:29
  • ご回答ありがとうございます。

    Win32APIの件は当方の誤解でした失礼しました。

    回答者さんの察しの通り、フォント名を得る事だけが目的ではなく描画する事までが目的です。Arial BlackはArialのフォントスタイル極太がArial Blackという事は理解していますが、Arialというフォントを指定後、フォントスタイルで極太を指定するのではなくWord/Excelの様にArialやArial NarrowやArial Black等のフォント名の一覧を表示し、選択時にフォーム上に表示されている文字列の形状を変更したいと考えています。

    フォント名やフォントファミリー、フォントスタイルについてももう少し勉強したいと考えていますので、参考書籍、サイト等がありましたらアドバイスねがいます。



    • 編集済み FUJI1230 2014年4月23日 11:24
    2014年4月23日 11:23
  • VB関連でフォントを体系的に解説している書籍は知りませんが、ネットなら以下の資料が役立つと思います。まず、MSDNの資料です。

    フォントとテキストの使用

    DOBON さんのところでは、フォントについて簡潔な解説とサンプルが公開されています。

    インストールされているフォントを取得する

    あとMicrosoft MVPのbiacさんがフォントを設定するときの注意点を Windows Store app samples に公開されています。

    フォントをコードから設定するときの注意点

    以上、参考になれば幸いです。

    ひらぽん http://d.hatena.ne.jp/hilapon/

    • 回答としてマーク FUJI1230 2014年4月24日 4:29
    2014年4月24日 3:12
    モデレータ
  • ありがとうございます。

    参考にさせていただきます。

    2014年4月24日 4:29