文本框填充

dab*_*dab 23 .net c# textbox padding winforms

我通过互联网搜索,我必须使用错误的关键字,因为我找不到任何东西.我想创建一个文本框,其文本从远离左侧开始.

http://dab.biz/images/screenie/2011-02-04_1316.png

就像那样.

Nim*_*rod 39

正如您最有可能发现的那样,Winforms Textboxes没有填充属性.由于Panels确实暴露了Padding属性,因此一种技术是:

  1. 创建一个面板
  2. 设置其边框以匹配文本框(例如,Fixed3D)
  3. 设置其背景颜色以匹配文本框(例如,白色或窗口)
  4. 将其填充设置为您满意的(例如,10,3,10,3)
  5. 在面板中添加文本框
  6. 将文本框的边框设置为无
  7. 使用文本框的Dock和Anchor属性可以获得所需的效果

这应该让你开始.您还可以创建一个与上面提到的相同的自定义控件.

如果您在asp.net中讨论Textbox,只需使用CSS:
input[type="text"] {padding: 3px 10px}

  • 唯一的问题是,对于许多较新的Windows外观,TextBox上的Fixed3D看起来与Panel不同. (3认同)
  • 将面板设置为具有聚焦在文本框中的单击事件可能是个好主意.由于这个新的填充区域似乎是文本框的一部分,因此如果用户单击它并且从不关注文本框,它可能会将用户关闭. (3认同)

Kei*_*thS 7

好吧,你可以使用TrimLeft,然后连接5个空格.或者,您可以设置一个自定义UserControl,其中无边框TextBox作为实际入口元素,覆盖另一个没有tabstop的TextBox,并在焦点聚焦时将焦点转移到无边框.


use*_*827 6

好的,这是一个合适的解决方案.首先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并在文本等中阻止不需要的换行符.