Nim*_*rod 39
正如您最有可能发现的那样,Winforms Textboxes没有填充属性.由于Panels确实暴露了Padding属性,因此一种技术是:
这应该让你开始.您还可以创建一个与上面提到的相同的自定义控件.
如果您在asp.net中讨论Textbox,只需使用CSS:
input[type="text"] {padding: 3px 10px}
好吧,你可以使用TrimLeft,然后连接5个空格.或者,您可以设置一个自定义UserControl,其中无边框TextBox作为实际入口元素,覆盖另一个没有tabstop的TextBox,并在焦点聚焦时将焦点转移到无边框.
好的,这是一个合适的解决方案.首先Multiline
将TextBox控件设置为true
.
需要使用声明:
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
Run Code Online (Sandbox Code Playgroud)
码:
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);
}
Run Code Online (Sandbox Code Playgroud)
现在这样打电话:
SetPadding(myTextBox, new Padding(5, 5, 5, 5));
Run Code Online (Sandbox Code Playgroud)
当然,最好是创建自己的TextBox控件,它可以自动设置Multiline
为true并在文本等中阻止不需要的换行符.