ラベルの ContentAlignment プロパティを MiddleRight に設定すると、ラベルを配置したパネル内でラベルが右に整列することが期待されます。代わりに、頑固に左揃えのままです。これはなぜですか、どうすれば修正できますか? これが私のコードです:
private void CreateNewLabel(int YPos, string DisplayStr, ContentAlignment contentAlign,
int FontSize)
{
Label lbl = new Label();
//lbl.Left = DEFAULT_XPOS;
lbl.Font = new Font(lbl.Font.Name, FontSize, lbl.Font.Style);
lbl.Top = YPos;
lbl.Text = DisplayStr;
lbl.TextAlign = contentAlign;
lbl.AutoSize = true;
panelFauxLabel.Controls.Add(lbl);
}
水平方向の配置を除いて、すべてが機能しています。Left プロパティを設定したくありません。これは、特定の配置で「右側」のスペースをすべて使用できるようにするためです。XPos の計算は可能だと思いますが、非常に複雑でもあり、さらに確信しています。
アップデート
オリヴィエの答えはうまくいきました。コードは次のとおりです。
private void CreateNewLabel(int YPos, string DisplayStr, ContentAlignment contentAlign, int FontSize)
{
Label lbl = new Label();
lbl.Left = DEFAULT_XPOS;
lbl.Font = new Font(lbl.Font.Name, FontSize, lbl.Font.Style);
lbl.Top = YPos;
lbl.Text = DisplayStr;
lbl.TextAlign = contentAlign;
if (contentAlign.Equals(ContentAlignment.MiddleRight))
{
lbl.Anchor = AnchorStyles.Right;
}
else // there is no AnchorStyles.Center or AnchorStyles.Middle
{
lbl.Anchor = AnchorStyles.Left;
}
lbl.AutoSize = false;
lbl.Width = panelFauxLabel.Width;
panelFauxLabel.Controls.Add(lbl);
}
更新 2
いわば、大きなフォントサイズが膝で切り落とされるのを防ぐために、ラベルの高さに微調整を追加する必要がありました。
// This factor was just a guess, but it seems to work pretty well
double down = Math.Round(FontSize*1.5);
lbl.Height = Convert.ToInt32(down);