0
オプションTextRenderingHint.ClearTypeGridFitでTahomaフォントで描画されるラベルにAutoSizeを使用するのは問題です。 ClearTypeGridFitが指定されていないと大丈夫ですが、親コンテナによって切り取られます(添付の画像:最初のラベル '、'が切り取られます)ラベルコントロールにTahoma、TextRenderingHint.ClearTypeGridFitとAutoSize(WindowsXP)の組み合わせを使用する
私はそれがTahomaフォントでしか見つかりませんでした。 customlabelの
コード:デザイナーのファイルからのコードの
class CustomLabel: Label
{
public CustomLabel()
:base()
{
}
protected override void OnPaint (PaintEventArgs e)
{
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
base.OnPaint(e);
}
}
平和:
public override Size GetPreferredSize (Size theProposedSize)
{
if (TextRendering == TextRenderingHint.ClearTypeGridFit)
{
Graphics aGraphics = Graphics.FromHwnd(this.Handle);
if (aGraphics != null)
{
aGraphics.TextRenderingHint = theTextRendering;
Size aResult = TextRenderer.MeasureText(aGraphics, Text, Font, theProposedSize);
//apply control minimum size
aResult.Height = Math.Max(aResult.Height, MinimumSize.Height);
aResult.Width = Math.Max(aResult.Width, MinimumSize.Width);
return aResult;
}
}
return base.GetPreferredSize(theProposedSize);
}
:私はちょうど上書きGetPreferedSize機能を発見した何
//
// label1
//
this.label1.AutoSize = true;
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Location = new System.Drawing.Point(54, 95);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(35, 13);
this.label1.TabIndex = 1;
this.label1.Text = resources.GetString("label1.Text");
//
// customLabel1
//
this.customLabel1.AutoSize = true;
this.customLabel1.BackColor = System.Drawing.Color.NavajoWhite;
this.customLabel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.customLabel1.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.customLabel1.ForeColor = System.Drawing.Color.Black;
this.customLabel1.Location = new System.Drawing.Point(1, 1);
this.customLabel1.Margin = new System.Windows.Forms.Padding(0);
this.customLabel1.Name = "customLabel1";
this.customLabel1.Size = new System.Drawing.Size(192, 154);
this.customLabel1.TabIndex = 0;
this.customLabel1.Text = resources.GetString("customLabel1.Text");
しかし、結果に最大サイズを適用することはできません。 なぜ最大サイズが必要ですか?たとえば、ラベルを幅で制限する可能性があります。
アイデア?
AutoSizeプロパティは、折り返しを防ぎ、唯一の事故で右のフォームエッジになるだろう。このラベルコントロールの実際の設定は何ですか? –
@Hans Passant、私は最初の投稿を変更しました – Allender