【问题标题】:Label grow from right to left标签从右向左增长
【发布时间】:2011-08-02 11:59:23
【问题描述】:

我的表单上有一个标签,位于表单的右侧。此标签加载动态文本。

有时它加载的文本太长并且文本跨越了表单的边界,即某些文本超出了表单。

我想让标签从右到左而不是从左到右增长。我如何做到这一点?

【问题讨论】:

  • 我的问题是我的标签在面板中,任何我都不会让它工作的东西。我所做的是将标签放在 tablelayoutpanel 控件中并将 rtl 设置为 yes。这成功了。
  • 好的,伙计们。我没想过将其发布为 anwser :p thx 以获取提示。

标签: c# .net winforms label


【解决方案1】:

我通过设置标签解决了这个问题

AutoSize 属性为 false

TextAlignMiddleRight

右侧锚点

请注意,标签大小本身并不会随着文本而增长,但您可以通过为其提供足够的宽度以适应内容来处理它。视觉效果是一样的。

【讨论】:

  • 当您的标签覆盖具有不同背景颜色的任何内容(例如PictureBox)时,这不是相同的视觉效果并且无法正常工作。
  • @MartinBraun 您可以只使用透明背景。视觉效果还是一样的。
  • 感谢您的回复,很好的尝试,但是对不起,我有点不明确:我的标签有背景颜色,所以它覆盖了标签字体所在的PictureBox下方,因此可以正确读取。使用AutoSize false 将需要我使用更大的宽度,因此我的PictureBox 将被覆盖而不是需要。基本上,我希望标签的纯色背景颜色仅低于标签字体本身,但我希望它能够向左增长。不要给自己压力,在我的情况下我可以左对齐,这只是我想指出的一个限制。
  • 就我个人而言,我更喜欢使用透明色作为标签背景。从设计的角度来看,它要好得多,但这是主观的。问候!
【解决方案2】:

我的问题是我的标签在面板中,我所做的任何事情都不起作用。

我所做的是将标签放在TableLayoutPanel 控件中,并将TableLayoutPanel 的RightToLeft 属性设置为True;这成功了。

【讨论】:

    【解决方案3】:

    你不能让它“从右到左增长”,但你可以分配它的Left属性,这样它就不会脱离表格:

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

    如果设计允许,您还可以将其高度加倍,以便文本跨越两行。

    【讨论】:

      【解决方案4】:

      您可以使用 TableLayoutPanel 或其他兼容的容器控件,而是为容器设置 RightToLeft 属性,为标签设置 Dock="Right"

      设置 RightToLeft 属性并不总是给出预期的结果,因为对于某些字符串格式,字符串会被修改以改变单词的顺序。

      【讨论】:

        【解决方案5】:

        你可以写:

            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;
                }
            }
        

        【讨论】:

        • 我用它来扩展现有的标签控件。但是,当第一次设置文本时,标签将其宽度向左移动时出现问题(因为它的初始宽度为 0)。为了解决这个问题,我刚刚添加了一个检查 oldWidth>0.
        【解决方案6】:
        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;
        }
        

        【讨论】:

          猜你喜欢
          • 2011-06-29
          • 2012-04-30
          • 2015-10-22
          • 2022-01-18
          • 2016-01-05
          • 2018-02-01
          • 2012-01-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多