199

Label範囲外のテキストのワードラップ機能を取得するにはどうすればよいですか?

4

19 に答える 19

374

実際、受け入れられた答えは不必要に複雑です。

ラベルをAutoSizeに設定すると、入力したテキストに合わせてラベルが自動的に大きくなります。(これには垂直成長が含まれます。)

特定の幅でワードラップする場合は、MaximumSizeプロパティを設定できます。

myLabel.MaximumSize = new Size(100, 0);
myLabel.AutoSize = true;

テストされ、動作します。

于 2010-09-09T21:06:46.023 に答える
176

簡単な答え:AutoSizeをオフにし ます。

ここでの大きな問題は、ラベルが自動的に高さを変更しないことです(幅のみ)。これを正しく行うには、ラベルをサブクラス化し、垂直方向のサイズ変更ロジックを含める必要があります。

基本的に、OnPaintで行う必要があるのは次のとおりです。

  1. テキストの高さを測定します(Graphics.MeasureString)。
  2. ラベルの高さがテキストの高さと等しくない場合は、高さを設定して戻ります。
  3. テキストを描画します。

また、コンストラクターでResizeRedrawスタイルフラグを設定する必要があります。

于 2009-07-30T06:37:06.083 に答える
25

私の場合(パネルのラベル)、設定label.AutoSize = falseしてlabel.Dock = Fill。また、ラベルテキストは自動的に折り返されます。

于 2012-03-27T07:58:03.007 に答える
22

autowrapプロパティはありませんが、プログラムで実行して動的にサイズを変更できます。これが1つの解決策です:

  • ラベルのプロパティを選択します

  • AutoSize=True

  • MaximumSize=(高さ)ここで、=ラベルの最大サイズ、高さ=折り返すピクセル数

    サンプルプロパティ

于 2011-09-14T17:02:32.770 に答える
13

MSDNから、ラベルでテキストを自動的にラップします:

using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

public class GrowLabel : Label {
    private bool mGrowing;
    public GrowLabel() {
        this.AutoSize = false;
    }
    private void resizeLabel() {
        if (mGrowing) 
            return;
        try {
            mGrowing = true;
            Size sz = new Size(this.Width, Int32.MaxValue);
            sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
            this.Height = sz.Height;
        }
        finally {
            mGrowing = false;
        }
    }
    protected override void OnTextChanged(EventArgs e) {
        base.OnTextChanged(e);
        resizeLabel();
    }
    protected override void OnFontChanged(EventArgs e) {
        base.OnFontChanged(e);
        resizeLabel();
    }
    protected override void OnSizeChanged(EventArgs e) {
        base.OnSizeChanged(e);
        resizeLabel();
    }
}
于 2009-09-22T13:06:29.347 に答える
6

簡単な解決策を見つけなければならなかったので、これらのプロパティを持つTextBoxを使用しました。

var myLabel = new TextBox
                    {
                        Text = "xxx xxx xxx",
                        WordWrap = true,
                        AutoSize = false,
                        Enabled = false,
                        Size = new Size(60, 30),
                        BorderStyle = BorderStyle.None,
                        Multiline =  true,
                        BackColor =  container.BackColor
                    };
于 2014-02-26T15:53:32.020 に答える
3

@hypoの答えに基づいてより良いものを持ってください

public class GrowLabel : Label {
    private bool mGrowing;
    public GrowLabel() {
        this.AutoSize = false;
    }
    private void resizeLabel() {
        if (mGrowing)
            return;
        try {
            mGrowing = true;
            int width = this.Parent == null ? this.Width : this.Parent.Width;

            Size sz = new Size(this.Width, Int32.MaxValue);
            sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
            this.Height = sz.Height + Padding.Bottom + Padding.Top;
        } finally {
            mGrowing = false;
        }
    }
    protected override void OnTextChanged(EventArgs e) {
        base.OnTextChanged(e);
        resizeLabel();
    }
    protected override void OnFontChanged(EventArgs e) {
        base.OnFontChanged(e);
        resizeLabel();
    }
    protected override void OnSizeChanged(EventArgs e) {
        base.OnSizeChanged(e);
        resizeLabel();
    }
}

int width = this.Parent == null ? this.Width : this.Parent.Width;これにより、パネルなどの親にドッキングしたときに自動拡張ラベルを使用できます。

this.Height = sz.Height + Padding.Bottom + Padding.Top;ここでは、上下のパディングを処理します。

于 2016-06-10T13:13:56.150 に答える
2
  1. パネルの中にラベルを入れます

  2. パネルのを処理ClientSizeChanged eventし、ラベルがスペースを埋めるようにします。

    private void Panel2_ClientSizeChanged(object sender, EventArgs e)
    {
        label1.MaximumSize = new Size((sender as Control).ClientSize.Width - label1.Left, 10000);
    }
    
  3. Auto-Sizeラベルを次のように設定しますtrue

  4. Dockラベルを次のように設定しますFill

ステップ2を除くすべては、通常、デザイナーウィンドウで実行されます。

于 2013-03-26T15:20:35.103 に答える
1

すべてのユースケースに適合するかどうかはわかりませんが、ラッピングの動作を取得するために簡単なトリックを使用することがよくあります。サイズを処理する1x1の中にあなたLabelを入れてください。AutoSize=falseTableLayoutPanelLabel

于 2015-10-02T14:31:31.773 に答える
1

AutoEllipsisプロパティを「TRUE」に設定し、AutoSizeプロパティを「FALSE」に設定します。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

于 2016-12-27T06:19:34.490 に答える
0

パネルがラベルの幅を制限している場合は、ラベルのAnchorプロパティをLeft、Rightに設定し、AutoSizeをtrueに設定できます。これは、概念的には、Panelのイベントをリッスンし、前の回答で提案されてSizeChangedいるようにラベルのMaximumSizeをに更新することに似ています。Anchorプロパティにリストされているすべての側は、含まれているControlのそれぞれの内側に固定されています。したがって、アンカーに2つの反対側をリストすると、コントロールの寸法が効果的に設定されます。左と右に固定すると、コントロールのWidthプロパティが設定され、上と下に固定すると、Heightプロパティが設定されます。new Size(((Control)sender).Size.Width, 0)

このソリューションは、C#として:

label.Anchor = AnchorStyles.Left | AnchorStyles.Right;
label.AutoSize = true;
于 2013-01-30T16:10:24.213 に答える
0

本当にコンテンツとは無関係にラベル幅を設定したい場合、最も簡単な方法は次のとおりです。

  • 自動サイズをtrueに設定
  • 最大幅を希望どおりに設定します
  • 最小幅を同じように設定します

これで、ラベルの幅は一定になりますが、ラベルの高さは自動的に調整されます。

次に、動的テキストの場合は、フォントサイズを小さくします。必要に応じて、ラベルテキストが設定されているサブでこのスニペットを使用します。

If Me.Size.Height - (Label12.Location.Y + Label12.Height) < 20 Then
    Dim naam As String = Label12.Font.Name
    Dim size As Single = Label12.Font.SizeInPoints - 1
    Label12.Font = New Font(naam, size)
End If
于 2013-12-08T11:07:46.367 に答える
0

これは、InpitWindow:In Designer for Label:というフォームで役に立ちました。

AutoSize = true;
Achors = Top, Left, Right.

private void InputWindow_Shown(object sender, EventArgs e) {
    lbCaption.MaximumSize = new Size(this.ClientSize.Width - btOK.Width - btOK.Margin.Left - btOK.Margin.Right -
        lbCaption.Margin.Right - lbCaption.Margin.Left, 
        Screen.GetWorkingArea(this).Height / 2);
    this.Height = this.Height + (lbCaption.Height - btOK.Height - btCancel.Height);
    //Uncomment this line to prevent form height chage to values lower than initial height
    //this.MinimumSize = new Size(this.MinimumSize.Width, this.Height);
}
//Use this handler if you want your label change it size according to form clientsize.
private void InputWindow_ClientSizeChanged(object sender, EventArgs e) {
    lbCaption.MaximumSize = new Size(this.ClientSize.Width - btOK.Width - btOK.Margin.Left * 2 - btOK.Margin.Right * 2 -
        lbCaption.Margin.Right * 2 - lbCaption.Margin.Left * 2,
        Screen.GetWorkingArea(this).Height / 2);
}

私のフォームのコード全体

于 2014-08-13T09:53:22.637 に答える
0

ボタンの寸法を変更しないようにする必要がある場合:

myButton.Text = "word\r\nwrapped"
于 2014-08-29T13:32:02.123 に答える
0

この問題の簡単な答えは、ラベルのDOCKプロパティを変更することです。デフォルトでは「NONE」です。

于 2018-02-22T11:26:54.287 に答える
0

事前にラベルにテキストを入力している場合は、これを行うことができます。

  1. デザイナで、ラベルを右クリックし、[プロパティ]をクリックします。
  2. [プロパティ]で、[テキスト]タブを検索します。
  3. タブをクリックし、その横にある矢印ボタンをクリックします。
  4. その上にボックスがポップアップ表示されます。
  5. ポップアップボックスでEnterキーを押すと、行を追加してメモ帳のように入力できます。(ラベルテキストを折り返したい場所でEnterキーを押します)
于 2020-03-11T13:42:36.333 に答える
0

AutoEllipsislabelのプロパティをtrueAutoSizeに設定することをお勧めしますfalse。テキストの長さがラベルの境界を超える場合は(...)、最後に3つのドットが追加され、テキスト全体がツールチップとして自動的に設定されます。したがって、ユーザーはラベルにカーソルを合わせるとテキスト全体を見ることができます。

于 2021-01-13T12:32:22.573 に答える
0

右にドッキングされた自動サイズパネルで自動折り返し、任意のサイズに拡大するラベルがあります。その幅は他のコンテンツによって設定されます。

ラベル(tablelayoutpanel内)自動サイズ=True。

TableLayoutPanel(パネル内)Autosize = True、AutoSizeMode = GrowAndShrink、Dock = Bottom、1つのColumn SizeType = 100%、1つのRow SizeType = 100%。

パネル(フォームに右ドッキング)AutoSize = True、AutoSizeMode = GrowAndShrink、Dock=右。

于 2021-07-18T18:19:16.997 に答える
-12

style="overflow:Scroll"以下のHTMLのようにラベルで使用します。これにより、パネル内のラベルにスクロールバーが追加されます。

<asp:Label
    ID="txtAOI"
    runat="server"
    style="overflow:Scroll"
    CssClass="areatext"
    BackColor="White"
    BorderColor="Gray"
    BorderWidth="1"
    Width = "900" ></asp:Label>
于 2012-02-10T10:35:22.913 に答える