c# - vincular - Relleno de cuadro de texto
vincular cuadro combinado con cuadro de texto en access (5)
Bueno, puedes TrimLeft, luego concatenar con 5 espacios. O bien, puede configurar un UserControl personalizado con un TextBox sin bordes como el elemento de entrada real, superponiendo otro TextBox que no tiene una tabulación y cambiará el enfoque al sin bordes cuando esté enfocado.
He buscado a través de Internet, debo usar palabras clave equivocadas porque no puedo encontrar nada. Quiero crear un cuadro de texto que tenga texto empezando desde un poco lejos de la izquierda.
Así.
Como es muy probable que haya descubierto, los cuadros de texto de Winforms no tienen una propiedad de relleno. Dado que los paneles exponen una propiedad de relleno, una técnica sería:
- Crear un panel
- Establezca su borde para que coincida con un cuadro de texto (por ejemplo, Fixed3D)
- Establecer su color de fondo para que coincida con un cuadro de texto (por ejemplo, blanco o ventana)
- Ajuste su relleno a su satisfacción (por ejemplo, 10,3,10,3)
- Añadir un cuadro de texto dentro del panel
- Establecer el borde del cuadro de texto en ninguno
- Jugar con las propiedades Dock y Anchor del cuadro de texto obtiene el efecto deseado
Esto debería empezar. También puede crear un control personalizado que haga lo mismo que se mencionó anteriormente.
En caso de que estuvieras hablando de Textboxes en asp.net, solo usa CSS:
input[type="text"] {padding: 3px 10px}
Esta pregunta ya ha recomendado respuesta. De todos modos me gustaría poner una respuesta alternativa. Para agregar relleno al cuadro de texto en c #, puede usar el método "padLeft". Espero que esta ayuda a alguien.
textBox1.Text = "Hello";
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5);
or
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5, ''*'');
OK, aquí hay una solución adecuada. En primer lugar, establezca Multiline
de su control TextBox en true
.
Necesitaba usar sentencias:
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
Código:
private const int EM_SETRECT = 0xB3;
[DllImport(@"User32.dll", EntryPoint = @"SendMessage", CharSet = CharSet.Auto)]
private static extern int SendMessageRefRect(IntPtr hWnd, uint msg, int wParam, ref RECT rect);
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public readonly int Left;
public readonly int Top;
public readonly int Right;
public readonly int Bottom;
private RECT(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
public RECT(Rectangle r) : this(r.Left, r.Top, r.Right, r.Bottom)
{
}
}
public void SetPadding(TextBox textBox, Padding padding)
{
var rect = new Rectangle(padding.Left, padding.Top, textBox.ClientSize.Width - padding.Left - padding.Right, textBox.ClientSize.Height - padding.Top - padding.Bottom);
RECT rc = new RECT(rect );
SendMessageRefRect(Handle, EM_SETRECT, 0, ref rc);
}
Ahora llama así:
SetPadding(myTextBox, new Padding(5, 5, 5, 5));
Por supuesto, lo mejor es crear su propio control TextBox que puede configurar automáticamente Multiline
en verdadero y detener los saltos de línea no deseados en el texto, etc.
Sé que esto es un poco viejo. Pero aquí hay una solución. Para el texto inicial, agregue un espacio al principio. Luego, puede anular el evento OnKeyPress
y agregar el siguiente código para que no pueda retroceder.
protected override void OnKeyPress (KeyPressEventArgs e) {
base.OnKeyPress (e);
if (e.KeyChar == (char)Keys.Back && Text.Length == 1) e.Handled = true;
else e.Handled = true;
}
Puede reemplazar el 1 con número de espacios para rellenar.