我通过互联网搜索,我必须使用错误的关键字,因为我找不到任何东西。我想创建一个文本框,其文本从左边开始。
就像那样。
答案 0 :(得分:38)
正如您最有可能发现的那样,Winforms Textboxes没有填充属性。由于Panels确实公开了Padding属性,因此一种技术是:
这应该让你开始。您还可以创建一个与上面提到的相同的自定义控件。
如果您在asp.net中讨论Textbox,请使用CSS:
input[type="text"] {padding: 3px 10px}
答案 1 :(得分:7)
好吧,你可以使用TrimLeft,然后连接5个空格。或者,您可以设置一个自定义UserControl,其中无边框TextBox作为实际入口元素,覆盖另一个没有tabstop的TextBox,并在焦点聚焦时将焦点转移到无边框。
答案 2 :(得分:6)
好的,这是一个合适的解决方案。首先将TextBox控件的Multiline
设置为true
。
需要使用陈述:
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
代码:
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);
}
现在这样打电话:
SetPadding(myTextBox, new Padding(5, 5, 5, 5));
当然,最好是创建自己的TextBox控件,它可以自动将Multiline
设置为true并在文本等中阻止不需要的换行符。
答案 3 :(得分:3)
这个问题已经推荐了答案。无论如何,我想提出替代答案。要在c#中向文本框添加填充,可以使用“padLeft”方法。希望对某人有所帮助。
textBox1.Text = "Hello";
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5);
or
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5, '*');
答案 4 :(得分:1)
我知道这有点老了。但这是一个解决方案。对于初始文本,请在开头添加空格。然后,您可以覆盖OnKeyPress
事件并添加以下代码,以便您无法退格。
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;
}
您可以将1替换为要填充的空格数。
答案 5 :(得分:0)
扩展了上面的响应,并意识到了能够通过填充值退格的缺点。文本框的SelectionStart属性可用于确定在触发TextChanged事件时将光标放置在何处。
在此示例中,在文本框的开头填充2个空格,以便显示的信息将与使用padding属性的其他非输入控件对齐。
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);
}