Выровнять текст по вертикали в текстовом поле, если AutoSize = false

1

Я пытаюсь расширить стандартный элемент управления TextBox в пространстве имен System.Windows.Forms. Одна из вещей, которую я пытаюсь выполнить, - изменить дополнение в верхней и нижней части TextBox (расстояние между текстом и границей).

Выполнение этого с левой/правой стороны довольно просто, но мне трудно получить что-либо, чтобы работать сверху/снизу.

Вот несколько моих требований (если возможно):

  • Избегайте расширения чего-либо, кроме System.Windows.Forms.TextBox (без UserControls)
  • Я хочу сохранить MultiLine= false

Этот код позволяет изменять размер по вертикали, и он добавляет левую прокладку:

public class TextBoxTest : TextBox
{
    public TextBoxTest()
    {
        base.AutoSize = false;
        NativeMethods.SendMessage(Handle, NativeMethods.EM_SETMARGINS, NativeMethods.EC_LEFTMARGIN, 20);

        base.Height = 55;
        base.Width = 150;
        base.Text = "This is a test";
    }
}

Это будет выглядеть так:

Изображение 174551

Я также попробовал EM_SETRECT но для этого нужен EM_SETRECT блок MultiLine.

Возможно ли верхнее/нижнее поле (или по вертикали) - без использования UserControl и сохранения MultiLine = false?

Если да, может кто-нибудь указать мне в правильном направлении?

UPDATE, чтобы уточнить, причина, по которой я хочу наследовать от TextBox, а не UserControl или Panel, - это значит, что он проходит тест утки (если он выглядит как утка, quacks, как утка и т.д.). Я хочу, if (myControl is TextBox)... для оценки true. Там может быть способ сделать это, я не много сделал с преобразователями типов и, возможно, это путь, который я должен использовать.

Я хочу, чтобы это было истинное расширение TextBox. Другими словами, он может делать почти все, что может сделать текстовое поле, плюс некоторые, но никаких ограничений из-за того, что он не имеет тип "TextBox". Похоже, что нужно как-то настроить его, он поддерживает левый и правый поля, но, по-видимому, не верхний/нижний поля. еще раз спасибо

  • 1
    Почему бы не сделать его многострочным и не допустить ввод ключа? Просто предложение, хотя
  • 0
    Благодаря Рональду, мне нужно немного подумать об этом, как и при других поведенческих различиях, когда MultiLine=true ? Это больше риторический вопрос для меня ...
Показать ещё 1 комментарий
Теги:
winforms
winapi
controls
custom-controls

1 ответ

0

Вы не можете изменить свойство заполнения текстового поля форм Windows из своего кода.

Вместо этого вы можете поместить текстовое поле в контейнер, например, панель удалите границу текстового поля, убедитесь, что свойство BackColor для обоих одинаково меняет свойство Dock текстового поля на Fill а затем применяет дополнение к панели.

  • 0
    Спасибо за ваш ответ, но одна из вещей, которые я хочу попытаться сделать, состоит в том, чтобы он не отображался как тип UserControl или Panel. Я добавил обновление в свой вопрос (последние 2 абзаца), чтобы объяснить, почему я хочу, чтобы он наследовал от TextBox ... Я имею в виду, если это вообще возможно.
  • 0
    Он по-прежнему может делать то же, что и текстовое поле. Ну, очевидно, это текстовое поле LOL. Но может показаться, что у текстового поля есть вертикальные отступы. В любом случае, почему вы хотите вертикальное заполнение?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню