Как сделать центр выравнивания текста группового блока в выигрышных формах?

Я использую групповой блок, и внутри него есть несколько элементов управления.

Мое требование состоит в том, чтобы установить заголовок группового блока в середине группового блока вместо левого.

Как?

4 ответа

Решение

Вы можете расширить класс групповой коробки следующим образом.

 public class CustomGrpBox : GroupBox
    {
        private string _Text = "";
        public CustomGrpBox()
        {
            //set the base text to empty 
            //base class will draw empty string
            //in such way we see only text what we draw
            base.Text = "";
        }
        //create a new property a
        [Browsable(true)]
        [Category("Appearance")]
        [DefaultValue("GroupBoxText")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public new string Text
        {
            get
            {

                return _Text;
            }
            set
            {

                _Text = value;
                this.Invalidate();
            }
        }
        protected override void OnPaint(PaintEventArgs e)
        {

              //first let the base class to draw the control 
              base.OnPaint(e);
              //create a brush with fore color
              SolidBrush colorBrush = new SolidBrush(this.ForeColor);
              //create a brush with back color
              var backColor = new SolidBrush(this.BackColor);
              //measure the text size
              var size = TextRenderer.MeasureText(this.Text, this.Font);
              // evaluate the postiong of text from left;
              int left = (this.Width - size.Width) / 2;
              //draw a fill rectangle in order to remove the border
              e.Graphics.FillRectangle(backColor, new Rectangle(left, 0, size.Width, size.Height));
              //draw the text Now
              e.Graphics.DrawString(this.Text, this.Font, colorBrush, new PointF(left, 0));

        }
    }

добавьте вышеупомянутый класс в свой проект и используйте "CustomGrpBox" вместо "GroupBox", который будет создан после сборки в вашем наборе инструментов.

и вы можете установить текст в любое время, как это.

private void Form2_Load(object sender, EventArgs e)
    {
        customGrpBox1.Text = "Hello World";
    }

это будет выглядеть так во время разработки визуальной студии

это будет выглядеть так во время разработки визуальной студии

К сожалению, вы можете установить заголовок справа, используя свойство RightToLeft, но нет никакого свойства, чтобы установить его в середине.

Что вы можете сделать, это установить пустой текст в вашем GroupBox, создать метку с заголовком и поместить эту метку над GroupBox (с тем же родителем).

Вы можете сделать это динамически при инициализации формы, вызвав следующую процедуру:

private void CenterGroupBoxTitle(GroupBox groupbox)
{
  Label label   = new Label() ;
  label.Text    = groupbox.Text ;
  groupbox.Text = "" ;
  label.Left    = groupbox.Left+(groupbox.Width-label.Width)/2 ;
  label.Top     = groupbox.Top + 2 ; // 2 is an example : adjust the constant
  label.Parent  = groupbox.Parent ;
  label.BringToFront() ;
}

Попробуйте создать пользовательский элемент управления, используя Panel в качестве контейнера и нарисуйте границу вокруг этого, вы можете полностью контролировать выравнивание заголовка.

Если вам нужен простой подход, вы можете оставить заголовок группового блока как пустой текст, а затем поместить label в центре позиции групповой коробки. Вы также можете определить это как пользовательский элемент управления, чтобы вам не приходилось делать это повторно.

Не очень красноречивое решение, но если у вас есть простой GroupBox, который остается (тот же размер, вы можете просто заполнить начало и конец пробелами.

пример: GroupBox.Text = " This is the groupbox text ";

Количество отступов будет зависеть от длины поля. Конечно, вы потеряете некоторые начальные и конечные строки GroupBox сверху, и, если это важно, тогда Ответ 3 кажется хорошим решением.

Другие вопросы по тегам