web-dev-qa-db-ja.com

ラベルは右から左に成長します

フォームの右側にあるラベルがフォームにあります。このラベルは動的テキストをロードします。

読み込まれるテキストが長すぎて、テキストがフォームの境界を越える場合があります。つまり、テキストの一部がフォームの外にあります。

ラベルを左から右ではなく、右から左に成長させたい。どうすればこれを達成できますか?

59
Yash

ここでの私の問題は、私のラベルがパネルにあり、何もしなかったことでした。

ラベルをTableLayoutPanelコントロールに配置し、TableLayoutPanelのRightToLeftプロパティをTrueに設定しました。これでうまくいきました。

23
Yash

ラベルを設定してこれを解決しました

AutoSize property to false

TextAlign to MiddleRight

アンカーからへ。

ラベルサイズ自体はテキストに合わせて大きくなるわけではありませんが、コンテンツに合わせて十分な幅を与えることで処理できます。視覚効果は同じです。

72

「右から左に成長」させることはできませんが、Leftプロパティを割り当てて、フォームから外れないようにすることができます。

label1.Text = "some dynamic text here...";
if (label1.Right > this.Width)
    label1.Left = this.Width - label1.Width;

デザインで許可されている場合は、テキストが2行にまたがるように高さを2倍にすることもできます。

6
Shadow Wizard

TableLayoutPanelまたはその他の互換性のあるコンテナーコントロールを使用できますが、代わりにコンテナーのRightToLeftプロパティを設定し、ラベルにDock = "Right"を設定します。

RightToLeftプロパティを設定しても、必ずしも期待される結果が得られるとは限りません。一部の文字列形式では、文字列が変更されて単語の順序が変更されるためです。

3
armadillo.mx

あなたはそれを書くことができます:

    public enum Leftorright { left,right}
    private Leftorright _LeftToRight = Leftorright.left;
    public Leftorright LeftToRight
    {
        get { return _LeftToRight; }
        set { _LeftToRight = value; }
    }


    protected override void OnTextChanged(EventArgs e)
    {
        int oldWidth;
        oldWidth = this.Width;
        base.OnTextChanged(e);
        if (LeftToRight == Leftorright.right && this.Width != oldWidth)
        {
            this.Left = this.Left - this.Width + oldWidth;
        }
    }
1
using System.Windows.Forms;

/// <summary>
/// The position of myLabel to the left of the otherControl component when entering 
/// text "s". 
/// You must set myLabel.AutoSize = true
/// </summary>
/// <param name="s">text</param>
void WriteText(string s)
{
    int len = TextRenderer.MeasureText ( s, myLabel.Font ).Width;
    myLabel.Left = otherControl.Left - 5 - len;
    myLabel.Text = s;
}
1
user10678882