Подтвердить что ты не робот

Пополнение текстового поля

Я искал через интернет, я должен использовать неправильные ключевые слова, потому что ничего не могу найти. Я хочу создать текстовое поле с текстом, начиная с немного далекого слева.

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

Просто так.

4b9b3361

Ответ 1

Как вы, скорее всего, обнаружили, Winforms Textboxes не имеют свойства дополнения. Поскольку Панели выставляют свойство Padding, один из методов:

  • Создать панель
  • Установите границу в соответствии с текстовым полем (например, Fixed3D)
  • Установите цвет фона в соответствии с текстовым полем (например, "Белый" или "Окно" )
  • Настройте свое дополнение к вашему удовлетворению (например, 10,3,10,3).
  • Добавить текстовое поле внутри панели
  • Установите для рамки текстового поля значение none
  • Воспроизведение с помощью свойств Dock и Anchor в текстовом поле позволяет получить желаемый эффект.

Это должно помочь вам начать. Вы также можете создать настраиваемый элемент управления, который делает то же самое, что упоминалось выше.

Если вы говорили о текстовых блоках в asp.net, просто используйте CSS:
input[type="text"] {padding: 3px 10px}

Ответ 2

Ну, вы можете TrimLeft, а затем объединить с 5 пробелами. Или вы можете настроить пользовательский UserControl с без полей TextBox как фактический элемент ввода, накладывая другой TextBox, который не имеет tabstop, и сместит фокус на безграничный, когда он сфокусировался.

Ответ 3

ОК, вот правильное решение. Прежде всего установите 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(Handle, EM_SETRECT, 0, ref rc);
}

Теперь вызовите так:

SetPadding(myTextBox, new Padding(5, 5, 5, 5));

Конечно, лучше всего создать свой собственный элемент управления TextBox, который может автоматически установить Multiline в true и остановить нежелательные строки в тексте и т.д.

Ответ 4

Этот вопрос уже порекомендовал ответ. Во всяком случае, я хотел бы поставить альтернативный ответ. Чтобы добавить дополнение к текстовому полю в С#, вы можете использовать метод padLeft. Надеюсь, что это поможет кому-то.

textBox1.Text = "Hello";
textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5);

or

textBox1.Text = textBox1.Text.PadLeft(textBox1.Text.Length + 5, '*');

Ответ 5

Я знаю, что это немного устарело. Но вот решение. Для исходного текста добавьте пробел в начале. Затем вы можете переопределить событие 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 номером пробела на пэд.