2011-08-30 12 views
3

アプリケーションのフォントサイズを動的に変更するにはどうすればよいでしょうか?私は多くのラベルを持つ多くの画面を持っています。これらのラベルは、少なくとも共通ラベルから継承しています。もう1つの問題は、ラベルを自動サイズにして、ラベル内の改行を使用して分断できるようにすることですか?私はそれがワイドになっていて自分自身をラップしていないので、多くのラベルを自動サイズ変更しないように切り替えました。C#ダイナミックフォントサイジングを処理する方法

現在、私はすべてのアンカーなどを設定しており、ボタンのいずれかが問題ありません。ダイナミックにサイズを変更する必要があるフォントだけです。

ありがとうございます!

+1

IMHOフォントサイズを動的に変更することはお勧めできません。私はWinformsのプログラミングをたくさんやっていて、オートサイズ、コンサートのコンサートを感じています。ドッキングはあなたに別のプレイヤーを追加できないほど魅力的です。しかし、多分あなたはそれを行うのに十分な理由があります。テキストラベルを折り返したい場合は、読み取り専用のテキストボックスを使用します。私はTableLayoutPanelが自動サイズ調整を調整する際に命を救うのを見つけました。 –

+0

<> Freudian slip? –

答えて

2

各フォームのコンストラクタでInitializeComponent();より前には、希望通りにthis.Font = new Font(...);と入力します。ただし、各コントロールをデフォルトのままにしておくと、コントロールをカスケードします。あなたは、常に初期化後にループを置くことができます。

foreach(Control c in this.Controls) 
{ 
    if(c is Label) //if you want to change Labels only 
     c.Font = new Font(...); 
} 

それは物事が奇妙に見える、あなたのAutoScaleModeと関連するプロパティを変更行った場合。

ラベルテキストの折り返しを処理する方法の問題に対処するには、Label1.AutoSize = trueを使用し、Label1.MaximumSize = new Size(x, 0);を設定します.xは最大幅です。

つまり、動的にスケーリングを行う場合は、WinFormsの代わりにWPFを使用する必要があります。これは、これらのタイプのタスクを自動的に処理する能力がさらにあります。

0

アプリケーション設定でフォントサイズを整数として保存できます。 フォントサイズを取得すると、起動時にアプリケーションでフォント状態が記憶されます。

Properties.Settings.Default.FontSize = 3; 
    Properties.Settings.Default.Save(); 

次に、上記のようにforeachループを使用します。

foreach(Control c in this.Controls) 
    { 
    c.Font = new Font(..); 
    // if(c is Panel) 
    // { 
    //  foreach(Control d in c.Controls) 
    //  { 
    //  d.Font = new Font(..); 
    //  } 
     } 
    } 
関連する問題