Я искал в Интернете, должно быть, я использую неправильные ключевые слова, потому что я ничего не могу найти. Я хочу создать текстовое поле с текстом, начинающимся немного слева.
Просто так.
Я искал в Интернете, должно быть, я использую неправильные ключевые слова, потому что я ничего не могу найти. Я хочу создать текстовое поле с текстом, начинающимся немного слева.
Просто так.
Как вы, скорее всего, заметили, текстовые поля Winforms не имеют свойства заполнения. Поскольку панели предоставляют свойство Padding, одним из способов будет:
Это должно вас начать. Вы также можете создать настраиваемый элемент управления, который выполняет то же самое, что упоминалось выше.
Если вы говорили о текстовых полях в asp.net, просто используйте CSS: input[type="text"] {padding: 3px 10px}
Хорошо, вот подходящее решение. Прежде всего установите Multiline
элемента управления TextBox на 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(textBox.Handle, EM_SETRECT, 0, ref rc);
}
Теперь звоните так:
SetPadding(myTextBox, new Padding(5, 5, 5, 5));
Конечно, лучше всего создать собственный элемент управления TextBox, который может автоматически устанавливать для Multiline
значение true и предотвращать нежелательные разрывы строк в тексте и т. Д.
Ну, вы можете TrimLeft, а затем объединить с 5 пробелами. Или вы можете настроить настраиваемый UserControl с TextBox без полей в качестве фактического элемента ввода, перекрывая другой TextBox, у которого нет табуляции, и смещает фокус на безграничный, когда он сфокусирован.
На этот вопрос уже рекомендован ответ. В любом случае я хотел бы поставить альтернативный ответ. Чтобы добавить отступ в текстовое поле в C #, вы можете использовать метод padLeft. Надеюсь, это кому-то поможет.
textBox1.Text = "Hello";
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5);
or
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5, '*');
TextChanged()
для установки PadLeft
при каждом изменении. Таким образом, он не мог опуститься ниже него.
- person C4d; 22.06.2016
Я знаю, что это немного устарело. Но вот выход. Для исходного текста добавьте пробел в начале. Затем вы можете переопределить событие 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 количеством пробелов для заполнения.
Расширение ответа выше и предполагаемый недостаток возможности возврата на пробел через заполненное значение. Свойство SelectionStart текстового поля можно использовать для определения положения курсора при срабатывании события TextChanged.
В этом примере текстовое поле заполняется в начале двумя пробелами, чтобы отображаемая информация была выровнена с другими элементами управления, не относящимися к вводу, где используется свойство заполнения.
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);
}