Как сделать центр выравнивания текста группового блока в выигрышных формах?
Я использую групповой блок, и внутри него есть несколько элементов управления.
Мое требование состоит в том, чтобы установить заголовок группового блока в середине группового блока вместо левого.
Как?
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 кажется хорошим решением.