親コンテナ全体に収まるようにラベルのテキストを拡大縮小できるようにする方法を探しています。私が考えることができる1つの方法は、ウィンドウのサイズ変更時にコンテナサイズを取得し、それに応じてフォントサイズを増減することですが、それはその可能性を制限します.
これを行うためのより良い方法があるかどうか疑問に思っています。それは、Winforms アプリケーションのアンカー プロパティのように機能する可能性があります。
親コンテナ全体に収まるようにラベルのテキストを拡大縮小できるようにする方法を探しています。私が考えることができる1つの方法は、ウィンドウのサイズ変更時にコンテナサイズを取得し、それに応じてフォントサイズを増減することですが、それはその可能性を制限します.
これを行うためのより良い方法があるかどうか疑問に思っています。それは、Winforms アプリケーションのアンカー プロパティのように機能する可能性があります。
グラフィックオブジェクトとペイントイベントのどこかに答えが隠されていることを知っていたので、これら2つのキーワードをいじって問題を解決しました。これが私の特定のケースで機能した解決策です。
次のように、ラベルのペイント イベントでフォント サイズを変更するだけです。
private void myLabel_Paint(object sender, PaintEventArgs e)
{
float fontSize = NewFontSize(e.Graphics, parentContainer.Bounds.Size, myLabel.Font, myLabel.Text);
Font f = new Font("Arial", fontSize, FontStyle.Bold);
myLabel.Font = f;
}
NewFontSize 関数は次のようになります。
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;
}
この記事も役に立ちました http://www.switchonthecode.com/tutorials/csharp-tutorial-font-scaling