0

ラベルの 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);
4

1 に答える 1

1

TextAlignパネル内のラベルではなく、ラベル内のテキストを揃えます。Anchorラベルをパネルの右端に揃えるために、プロパティの使用を検討してください。


アップデート

これを行う方法は次のとおりです。ラベルをパネルと同じ幅にし、ラベルを上、左、右に固定します。

lbl.TextAlign = contentAlign;
lbl.AutoSize = false;
lbl.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
lbl.Top = YPos;
lbl.Left = 0;
lbl.Width = panelFauxLabel.ClientSize.Width; // ClientSize takes account of scroll
                                             // bars, borders and padding.
panelFauxLabel.Controls.Add(lbl);

ラベルはパネルと一緒にサイズ変更され、テキストはラベル内で正しく配置されるようになりました。ラベルのサイズをテキストの長さに依存しないようにするには、 に設定lbl.AutoSizeします。false

于 2013-02-15T17:55:33.393 に答える