Установите BorderStyle
TextBox на FixedSingle
.
Обновление : не существует простого способа управления шириной границы TextBox, но вы можете легко создать этот эффект самостоятельно, создав собственный UserControl. По сути, вы просто установите BackColor
UserControl на SystemColors.WindowFrame
, а затем поместите TextBox на элемент управления с BorderStyle
из None
. В событии Resize элемента управления вы можете затем переместить TextBox так, чтобы он оставлял границу (которая представляет собой сам UserControl, просвечивающий по краям) в 2 пикселя или 5 или что угодно.
Обновление 2: Я написал пример пользовательского элемента управления под названием "ThextBox" (для Th с выделенным символом T extBox ), который имеет настраиваемую рамку:
public partial class ThextBox : UserControl
{
private TextBox _TextBox;
private int _BorderWidth = 1;
[Browsable(true)]
[DesignerSerializationVisibility
(DesignerSerializationVisibility.Visible)]
public override string Text
{
get
{
return _TextBox.Text;
}
set
{
_TextBox.Text = value;
}
}
[DesignerSerializationVisibility
(DesignerSerializationVisibility.Visible)]
public bool Multiline
{
get
{
return _TextBox.Multiline;
}
set
{
_TextBox.Multiline = value;
ResizeMe();
}
}
[DesignerSerializationVisibility
(DesignerSerializationVisibility.Visible)]
public bool UseSystemPasswordChar
{
get
{
return _TextBox.UseSystemPasswordChar;
}
set
{
_TextBox.UseSystemPasswordChar = value;
}
}
[DesignerSerializationVisibility
(DesignerSerializationVisibility.Visible)]
public char PasswordChar
{
get
{
return _TextBox.PasswordChar;
}
set
{
_TextBox.PasswordChar = value;
}
}
[DesignerSerializationVisibility
(DesignerSerializationVisibility.Visible)]
public int BorderWidth
{
get
{
return _BorderWidth;
}
set
{
_BorderWidth = value;
ResizeMe();
}
}
public ThextBox()
{
InitializeComponent();
this.BackColor = SystemColors.WindowFrame;
_TextBox = new TextBox();
_TextBox.Multiline = false;
_TextBox.BorderStyle = BorderStyle.None;
this.Controls.Add(_TextBox);
ResizeMe();
}
protected override void OnFontChanged(EventArgs e)
{
base.OnFontChanged(e);
ResizeMe();
}
private void ResizeMe()
{
if (this.Multiline)
{
_TextBox.Height = this.Height - (2 * _BorderWidth);
}
else
{
this.Height = _TextBox.Height + (2 * _BorderWidth);
}
_TextBox.Width = this.Width - (2 * _BorderWidth);
_TextBox.Location = new Point(_BorderWidth, _BorderWidth);
}
private void ThextBox_Resize(object sender, EventArgs e)
{
ResizeMe();
}
}
Чтобы использовать этот код в своем проекте, добавьте UserControl с именем «ThextBox» в свой проект и вставьте этот код поверх того, что добавил дизайнер. Этот элемент управления имеет настраиваемую границу, и он также «хорошо играет» с дизайнером, позволяя вам установить все его соответствующие свойства в режиме конструктора. Также автоматически сохраняются такие вещи, как введенный текст, ширина границы, символ пароля и т. Д.
Если вам нужно расширить это, добавив дополнительные специфичные для TextBox свойства (например, MaxLength
и RightToLeft
, просто следуйте примеру в свойстве PasswordChar
этого элемента управления. Одно из преимуществ наследования непосредственно из TextBox вместо UserControl, как это было бы, ваш элемент управления будет автоматически иметь все свойства TextBox. Однако вы не можете сделать границу таким образом.