I've searched through the internet, I must be using the wrong keywords because I can't find anything. I want to create a textbox that has text starting from a little far from the left.
Just like that.
I've searched through the internet, I must be using the wrong keywords because I can't find anything. I want to create a textbox that has text starting from a little far from the left.
Just like that.
As you have most likely discovered, Winforms Textboxes do not have a padding property. Since Panels do expose a Padding property, one technique would be to:
This should get you started. You could also create a custom control that does the same thing as mentioned above.
In case you were talking about Textboxes in asp.net, just use CSS:
input[type="text"] {padding: 3px 10px}
OK, here is a proper solution. First of all set Multiline
of your TextBox control to true
.
Needed using statements:
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
Code:
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(textBox.Handle, EM_SETRECT, 0, ref rc);
}
Now call like so:
SetPadding(myTextBox, new Padding(5, 5, 5, 5));
Of course, best is to create your own TextBox control which can automatically set Multiline
to true and stop unwanted lines breaks in the text etc..
Well, you can TrimLeft, then concatenate with 5 spaces. Or, you can set up a custom UserControl with a borderless TextBox as the actual entry element, overlaying another TextBox that doesn't have a tabstop and will shift focus to the borderless one when it's focused.
This question has recommended answer already. Anyway I would like to put alternative answer. To add padding to the textbox in c#,you can use "padLeft" method. Hope this help to someone.
textBox1.Text = "Hello";
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5);
or
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5, '*');
TextChanged()
to set PadLeft
on every change. This way it couldnt get below it. –
Scipio I know this is a bit old. But here is a solution. For the initial text, add a space at the beginning. Then, you can override the OnKeyPress
event and add the following code so that you can't backspace.
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;
}
You can replace the 1 with number of spaces to pad.
Expanding upon a response above and a perceived drawback of being able to backspace through the padded value. The SelectionStart property of the textbox can be used to determine where to position cursor when the TextChanged event fires.
In this example, the textbox is padded at the beginning with 2 spaces so that the information displayed will align with other non-input controls where the padding property is used.
private void textBox1_TextChanged(object sender, EventArgs e)
{
int pad = 2;
int cursorPos = textBox1.SelectionStart;
textBox1.Text = textBox1.Text.Trim().PadLeft(textBox1.Text.Trim().Length + pad);
textBox1.SelectionStart = (cursorPos > pad ? cursorPos : pad);
}
© 2022 - 2024 — McMap. All rights reserved.