Как изменить BorderColor текстового поля, когда пользователь нажимает на него или фокусируется на нем?Изменить borderColor TextBox
ответ
попробовать это
bool focus = false;
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (focus)
{
textBox1.BorderStyle = BorderStyle.None;
Pen p = new Pen(Color.Red);
Graphics g = e.Graphics;
int variance = 3;
g.DrawRectangle(p, new Rectangle(textBox1.Location.X - variance, textBox1.Location.Y - variance, textBox1.Width + variance, textBox1.Height +variance));
}
else
{
textBox1.BorderStyle = BorderStyle.FixedSingle;
}
}
private void textBox1_Enter(object sender, EventArgs e)
{
focus = true;
this.Refresh();
}
private void textBox1_Leave(object sender, EventArgs e)
{
focus = false;
this.Refresh();
}
спасибо человеку, он работает, но он также меняет borderColor всех других текстовых полей в форме тоже. Можете ли вы объяснить, как это произошло и как сделать цвет красным , его только в синем! –
Я не думаю, что приведенный выше код изменит границу всех текстовых полей.Что мы делаем, мы рисуем прямоугольник вокруг textBox1 – PraveenVenu
Как применять разные цвета на границе или вокруг Rectangle –
Это окончательное решение, чтобы установить цвет границы текстового поля:
public class BorderedTextBox : UserControl
{
TextBox textBox;
public BorderedTextBox()
{
textBox = new TextBox()
{
BorderStyle = BorderStyle.FixedSingle,
Location = new Point(-1, -1),
Anchor = AnchorStyles.Top | AnchorStyles.Bottom |
AnchorStyles.Left | AnchorStyles.Right
};
Control container = new ContainerControl()
{
Dock = DockStyle.Fill,
Padding = new Padding(-1)
};
container.Controls.Add(textBox);
this.Controls.Add(container);
DefaultBorderColor = SystemColors.ControlDark;
FocusedBorderColor = Color.Red;
BackColor = DefaultBorderColor;
Padding = new Padding(1);
Size = textBox.Size;
}
public Color DefaultBorderColor { get; set; }
public Color FocusedBorderColor { get; set; }
public override string Text
{
get { return textBox.Text; }
set { textBox.Text = value; }
}
protected override void OnEnter(EventArgs e)
{
BackColor = FocusedBorderColor;
base.OnEnter(e);
}
protected override void OnLeave(EventArgs e)
{
BackColor = DefaultBorderColor;
base.OnLeave(e);
}
protected override void SetBoundsCore(int x, int y,
int width, int height, BoundsSpecified specified)
{
base.SetBoundsCore(x, y, width, textBox.PreferredHeight, specified);
}
}
Можем ли мы сделать это текстовое поле многострочным? –
WinForms никогда не был хорош в этом, и это немного боли.
Один из способов, вы можете попробовать это путем встраивания TextBox в панели управления, а затем рисунок на основе фокуса оттуда:
public class BorderTextBox : Panel {
private Color _NormalBorderColor = Color.Gray;
private Color _FocusBorderColor = Color.Blue;
public TextBox EditBox;
public BorderTextBox() {
this.DoubleBuffered = true;
this.Padding = new Padding(2);
EditBox = new TextBox();
EditBox.AutoSize = false;
EditBox.BorderStyle = BorderStyle.None;
EditBox.Dock = DockStyle.Fill;
EditBox.Enter += new EventHandler(EditBox_Refresh);
EditBox.Leave += new EventHandler(EditBox_Refresh);
EditBox.Resize += new EventHandler(EditBox_Refresh);
this.Controls.Add(EditBox);
}
private void EditBox_Refresh(object sender, EventArgs e) {
this.Invalidate();
}
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.Clear(SystemColors.Window);
using (Pen borderPen = new Pen(this.EditBox.Focused ? _FocusBorderColor : _NormalBorderColor)) {
e.Graphics.DrawRectangle(borderPen, new Rectangle(0, 0, this.ClientSize.Width - 1, this.ClientSize.Height - 1));
}
base.OnPaint(e);
}
}
Использование OnPaint
нарисовать пользовательскую границу элементов управления в порядке. Но знайте, как использовать OnPaint
, чтобы повысить эффективность и сократить время до минимума. Прочтите это, если вы испытываете лагирующий графический интерфейс при использовании пользовательских подпрограмм: What is the right way to use OnPaint in .Net applications?
Поскольку принятый ответ PraVn может показаться простым, но фактически неэффективным. Использование настраиваемого элемента управления, как и те, что указаны в ответах выше, намного лучше.
Возможно, производительность не является проблемой в вашем приложении, поскольку она небольшая, но для больших приложений с множеством пользовательских подпрограмм OnPaint это неправильный подход, чтобы использовать способ, показанный PraVn.
набор стилей Текстовое поле Border к None затем записать этот код в виде контейнера «краска» событие
private void Form1_Paint(object sender, PaintEventArgs e)
{
System.Drawing.Rectangle rect = new Rectangle(TextBox1.Location.X, TextBox1.Location.Y, TextBox1.ClientSize.Width, TextBox1.ClientSize.Height);
rect.Inflate(1, 1); // border thickness
System.Windows.Forms.ControlPaint.DrawBorder(e.Graphics, rect, Color.DeepSkyBlue, ButtonBorderStyle.Solid);
}
Вы можете обрабатывать WM_NCPAINT
сообщение о TextBox
и нарисовать границу области не клиентского управления, если контроль имеет фокус. Вы можете использовать любой цвет, чтобы нарисовать границу:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class ExTextBox : TextBox
{
[DllImport("user32")]
private static extern IntPtr GetWindowDC(IntPtr hwnd);
private const int WM_NCPAINT = 0x85;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_NCPAINT && this.Focused)
{
var dc = GetWindowDC(Handle);
using (Graphics g = Graphics.FromHdc(dc))
{
g.DrawRectangle(Pens.Red, 0, 0, Width - 1, Height - 1);
}
}
}
}
Результат
Картина границ, а контроль сфокусирован полностью немерцающий:
Примечание
В текущем сообщении Я просто меняю цвет рамки на фокус. Вы также можете добавить элемент управления BorderColor
. Затем вы можете изменить цвет границы на основе вашего требования во время разработки или времени выполнения. Here я отправил более заполненную версию TextBox
которая имеет BorderColor
свойство:
- 1. изменить bordercolor UIPopOverController
- 2. Невозможно изменить borderColor TD
- 3. Как изменить ProgressView BorderColor
- 4. Изменить UITextField borderColor в Xamarin
- 5. как изменить bordercolor, когда Button.isHighlighted
- 6. DataGridViewCell Bordercolor
- 7. Asp.net textbox установка bordercolor из кода позади и удаление его
- 8. Как пометить/изменить UIButton borderColor с анимацией
- 9. Xamarin.iOS изменить bordercolor для пользовательского контроля
- 10. Изменить размер шрифта TextBox
- 11. Изменить borderStyle в TextBox
- 12. Как изменить шрифт TextBox
- 13. Невозможно изменить цвет TextBox?
- 14. Asp.net TextBox Изменить цвет
- 15. Изменить вид управления TextBox
- 16. CATextLayer font borderColor?
- 17. Установить borderColor на UIView
- 18. Анимация borderColor с jQueryUI
- 19. BorderColor на XtraUserControl
- 20. как изменить BorderColor из изображения программно в asp.net
- 21. Как изменить кнопку borderColor в UICollectionReusableView, когда ячейка выделена
- 22. Как изменить передний план + bordercolor, когда кнопка отключена Windows 8?
- 23. Как изменить цвет фона TextBox?
- 24. Изменить ASP.NET TextBox сгенерированный html?
- 25. Как изменить язык TextBox автоматически
- 26. Как изменить цвет фона TextBox?
- 27. установка UIView BorderColor в iOS9.0
- 28. Set StyledText BorderColor with StyleRange
- 29. DevX GridControl для WinForms - BorderColor
- 30. Изменение UIButton BorderColor в раскадровке
Если вы ищете '' TextBox', имеющего собственности BorderColor', взглянуть на [Изменить цвет границы в TextBox] (HTTP : //stackoverflow.com/a/39420512/3110834) –