¿Cómo hacer que el cuadro de grupo de alineación de texto se centre en formas de ganar?

Estoy usando un cuadro de grupo y hay varios controles dentro de este.

Mi requisito es establecer el título del cuadro de grupo en el centro del cuadro de grupo en lugar de Izquierda.

¿Cómo?

Puede ampliar la clase de cuadro de grupo de esta manera.

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

agregue la clase anterior en su proyecto y use “CustomGrpBox” en lugar de “GroupBox”, que se creará después de construir en su caja de herramientas.

y puedes configurar el texto en cualquier momento como este.

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

Se verá así en el estudio visual de tiempo de diseño.

Se verá así en el estudio visual de tiempo de diseño.

Desafortunadamente, puede establecer el título a la derecha utilizando la propiedad RightToLeft, pero no hay ninguna propiedad para establecerlo en el medio.

Lo que puede hacer es establecer un texto vacío en su GroupBox, crear una etiqueta con el título y colocar esa etiqueta encima de la GroupBox (con el mismo padre).

Puede hacerlo dinámicamente en la inicialización del formulario llamando al siguiente procedimiento:

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

Trate de crear un control personalizado utilizando el Panel como contenedor y dibuje un borde alrededor de este, luego puede tener control total de la alineación del título.

Si desea un enfoque simple, puede dejar el título del cuadro de grupo como texto vacío y luego colocar una label en la posición central del cuadro de grupo. También puede definir esto como control de usuario para que no tenga que hacerlo repetidamente.

No es una solución eloquent, pero si tiene un GroupBox simple, que se mantiene igual (del mismo tamaño, solo puede rellenar el principio y el final con espacios).

ejemplo: GroupBox.Text = " This is the groupbox text ";

La cantidad de relleno del espacio dependerá de la longitud de la caja. Por supuesto, perderá algunas de las líneas de inicio y final de GroupBox en la parte superior, y si eso es importante, entonces Answer 3 parece una buena solución.