¿Cómo puedo cambiar el BorderColor del cuadro de texto cuando un usuario hace clic en él o se enfoca en él?Cambiar el borderColor del cuadro de texto
Respuesta
probar esto
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();
}
gracias, funciona, pero también cambia el borderColor de todos los demás cuadros de texto del formulario. ¿Puede explicar cómo sucedió y cómo hacer que el color sea rojo? , solo en azul !! –
No creo que el código anterior cambie el borde de todos los cuadros de texto.Lo que estamos haciendo es dibujar un rectángulo alrededor de textBox1 – PraveenVenu
Cómo aplicar diferentes colores en el borde, o alrededor del rectángulo –
Esta es una solución definitiva para establecer el color del borde de un cuadro de texto:
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);
}
}
¿Podemos hacer este cuadro de texto multilínea? –
WinForms nunca fue bueno en esto y es un poco de dolor.
Una forma que puede probar es mediante la incorporación de un cuadro de texto en un panel y luego administrar el dibujo basado en el enfoque de allí:
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);
}
}
Usando OnPaint
para dibujar un borde personalizado en sus controles está muy bien. Pero sepa cómo usar OnPaint
para mantener la eficiencia y reducir el tiempo al mínimo. Lea esto si experimenta una GUI lenta al usar rutinas de pintura personalizadas: What is the right way to use OnPaint in .Net applications?
Porque la respuesta aceptada de PraVn puede parecer simple, pero en realidad es ineficiente. Usar un control personalizado, como los publicados en las respuestas anteriores, es mucho mejor.
Tal vez el rendimiento no sea un problema en su aplicación, porque es pequeño, pero para aplicaciones más grandes con muchas rutinas OnPaint personalizadas, es un enfoque incorrecto utilizar el modo que mostró PraVn.
sistema del estilo del cuadro de texto Borde en Ninguno luego escribir el código a la forma de contenedores evento "pintura"
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);
}
Puede manejar WM_NCPAINT
mensaje de TextBox
y trazar una frontera en el área no cliente de control si el control tiene foco. Se puede usar cualquier color para dibujar la frontera:
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);
}
}
}
}
Resultado
La pintura de las fronteras mientras que el control se centra es completamente libre de parpadeo:
Nota
En la publicación actual Solo cambio el color del borde en el foco. También puede agregar una propiedad BorderColor
al control. Luego puede cambiar el color del borde en función de sus necesidades en tiempo de diseño o tiempo de ejecución. Me Here publicado una versión más completa de TextBox
que tiene BorderColor
propiedad:
- 1. cambiar la dirección del texto del cuadro de texto automáticamente
- 2. ¿Cambiar el color del texto del cuadro de grupo?
- 3. cambiar el aspecto del cuadro Editar texto en android
- 4. Cambiar el valor del cuadro de texto cuando se selecciona un elemento en el cuadro desplegable
- 5. ¿Cambiar el texto del lapso?
- 6. Cambiar contenido de pegado en el cuadro de texto
- 7. ¿Cómo cambiar el texto del botón para los botones "Sí" y "No" en el cuadro de diálogo Cuadro de mensaje.Mostrar?
- 8. Cambiar el color del texto en el campo de texto
- 9. Creando un cuadro de texto WPF Control como el cuadro de texto del destinatario de Outlook
- 10. Cambiar el color de fondo y el color de fondo del texto en un cuadro de texto
- 11. ¿Cambiar el texto del botón de xcode?
- 12. ¿Cómo cambiar el color de fondo del cuadro de texto con discapacidad en WPF
- 13. cómo cambiar el idioma de entrada del cuadro de texto en la aplicación web
- 14. cómo cambiar el estilo del cuadro de texto de entrada a la línea?
- 15. Deshabilitar cuadro de texto sin cambiar de estilo?
- 16. Deje cuadro de texto para cambiar el tamaño, pero no crece en la entrada del usuario
- 17. Cómo cambiar el valor del cuadro de texto en seleccionar evento con autocompletar (jQuery UI)
- 18. Prevenir el parpadeo del cursor en el cuadro de texto
- 19. ¿Cómo cambiar el texto de TextView en el cambio del texto de EditText?
- 20. C# - Validación del cuadro de texto
- 21. Onclick Expandir ancho del cuadro de texto
- 22. Desactivar las sugerencias del cuadro de texto
- 23. Cambiar el color del texto en MoreNavigationController
- 24. Cambiar el color del texto en Eclipse
- 25. Quitar signo negativo del cuadro de texto
- 26. ¿Cómo cambiar el color del texto seleccionado?
- 27. Obtener el texto del cuadro combinado en C#
- 28. Android: ¿Cómo cambiar el color del texto de ProgressDialog?
- 29. Cuadro de texto árabe
- 30. Cuadro de texto enriquecido cómo resaltar el bloque de texto
Si usted está buscando un '' TextBox' tener la propiedad BorderColor', echar un vistazo a [color del borde Cambio en el cuadro de texto] (http : //stackoverflow.com/a/39420512/3110834) –