2016-10-11 15 views
1

私は、ラベル、リッチテキストボックス、テキストボックス、およびボタンの束を持つフォームを持っています。私はアンカーとオートスケール(dpi /フォント)を使いこなしていました。幅広い画面解像度でUIが多かれ少なかれ見えるようにしました。これまでは、コントロールのサイズを適切に変更することでいくつかの進歩を遂げましたが、コントロールの変更後にフォントサイズを調整する必要があります。ループのあるフォーム上のすべてのコントロールでフォントサイズを調整する方法はありますか?

私はthis questionからソリューションを試しました(親コンテナを無視してラベル自体を無視するという小さな変更で)、ラベルには効果的でしたが、テキストボックスにはペイントイベントがありません。通常、文字列の大きさを与えるためにPaintEventArgsののe.Graphicsに渡される情報からスケーリング比を得る:

public static float NewFontSize(Graphics graphics, Size size, Font font, string str) 
    { 
     SizeF stringSize = graphics.MeasureString(str, font); 
     float wRatio = size.Width/stringSize.Width; 
     float hRatio = size.Height/stringSize.Height; 
     float ratio = Math.Min(hRatio, wRatio); 
     return font.Size * ratio; 
    } 

    private void lblTempDisp_Paint(object sender, PaintEventArgs e) 
    { 
     float fontSize = NewFontSize(e.Graphics, lblTempDisp.Bounds.Size, lblTempDisp.Font, lblTempDisp.Text); 
     Font f = new Font("Arial", fontSize, FontStyle.Bold); 
     lblTempDisp.Font = f; 

    } 

プライマリ質問:のフォントサイズを調整するための同様の方法はありますテキストボックス?

セカンダリ質問:フォームの1つのタイプのすべてのコントロールをループする適切な方法はありますか?私は試しました:

foreach (Label i in Controls) 
     { 
      if (i.GetType() == Label)//I get an error here that says 
      //"Label is a type, which is not valid in the given context" 
      { 
       i.Font = f; 
      } 
     } 

と私はコントロールがラベルであるかどうかをチェックする方法がありますが、これはそれではないようです。あなたの2番目の質問について

+0

代わりに '' ==比較タイプの 'is'演算子を使用してみてください:

別の方法はこれです。 – Roy123

+0

ラベルではないラベルコントロールをiに配置しようとするため、foreach(コントロールのLabel i)は機能しません。 – GuidoG

+0

フォントはアンビエントプロパティです。親コントロールのフォントを設定すると、その子はすべて同じフォントを使用します。だから私はあなたが特定のタイプのすべての子コントロールにフォントを適用する必要がない限り、フォントをすべてのコントロールに割り当てるループが必要ではないと思います。この場合、[この投稿](http: /stackoverflow.com/questions/3419159/how-to-get-all-child-controls-of-a-windows-forms-form-of-a-specific-type-button)。 –

答えて

3

foreach (Label label in Controls.OfType<Label>()) 
{ 
    label.Font = f; 
} 
関連する問題