Я пытаюсь расширить стандартный элемент управления 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";
}
}
Это будет выглядеть так:
Я также попробовал EM_SETRECT
но для этого нужен EM_SETRECT
блок MultiLine.
Возможно ли верхнее/нижнее поле (или по вертикали) - без использования UserControl и сохранения MultiLine = false?
Если да, может кто-нибудь указать мне в правильном направлении?
UPDATE, чтобы уточнить, причина, по которой я хочу наследовать от TextBox, а не UserControl или Panel, - это значит, что он проходит тест утки (если он выглядит как утка, quacks, как утка и т.д.). Я хочу, if (myControl is TextBox)...
для оценки true. Там может быть способ сделать это, я не много сделал с преобразователями типов и, возможно, это путь, который я должен использовать.
Я хочу, чтобы это было истинное расширение TextBox. Другими словами, он может делать почти все, что может сделать текстовое поле, плюс некоторые, но никаких ограничений из-за того, что он не имеет тип "TextBox". Похоже, что нужно как-то настроить его, он поддерживает левый и правый поля, но, по-видимому, не верхний/нижний поля. еще раз спасибо
Вы не можете изменить свойство заполнения текстового поля форм Windows из своего кода.
Вместо этого вы можете поместить текстовое поле в контейнер, например, панель удалите границу текстового поля, убедитесь, что свойство BackColor
для обоих одинаково меняет свойство Dock
текстового поля на Fill
а затем применяет дополнение к панели.
MultiLine=true
? Это больше риторический вопрос для меня ...