Textbox padding
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:
- Create a Panel
- Set its border to match a Textbox (e.g., Fixed3D)
- Set its background color to match a Textbox (e.g., White or Window)
- Set its padding to your satisfaction (e.g., 10,3,10,3)
- Add a Textbox inside the panel
- Set the Textbox's border to none
- Play with the Textbox's Dock and Anchor properties do get desired effect
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..