Как избежать наложения изображения и текста в пользовательском текстовом поле? - PullRequest
0 голосов
/ 02 апреля 2012

Я получил новый элемент управления из System.Windows.Forms.TextBox, который отображает изображение в своей клиентской области, как вы можете видеть из следующего изображения:

UnitTextBox

Вот код:

public partial class UnitTextBox: TextBox {
    public UnitTextBox() {
        TextAlign = HorizontalAlignment.Right;
        InitializeComponent();
        Controls.Add(pictureBox1);
        pictureBox1.Location = new Point(0, 0);
    }
}

Когда я добавляю несколько символов, текст прокручивается влево и опускается под изображение.Есть ли способ дополнить текстовую область?

Ответы [ 2 ]

2 голосов
/ 04 апреля 2012

Я делал подобное однажды.Самый простой способ сделать это - создать UserControl, подобный предложенному BradRem, а затем поместить TextBox без полей в Panel с тем же цветом фона, что и TextBox.Слева на этой панели вы положили свой значок.Как полный UserControl, он теперь ведет себя как TextBox с зарезервированной областью слева со значком в нем.

Обновление:

Я должен был проверить это для себя и создал UserControl, как я сказал.Кроме того, я добавил событие Paint в панель контейнера, которое рисует границу того же цвета, что и TextBox:

    public partial class UCTextBoxWithLabel : UserControl {
        public UCTextBoxWithLabel() {
            InitializeComponent();

            pnlTextBoxWithImage.Paint += new PaintEventHandler(pnlTextBoxWithImage_Paint);
        }

        void pnlTextBoxWithImage_Paint(object sender, PaintEventArgs pea) {
            ControlPaint.DrawBorder(pea.Graphics, pea.ClipRectangle, Color.FromArgb(0x7f, 0x9d, 0xb9), ButtonBorderStyle.Solid);
        }
    }

... и выглядит примерно так, как вы хотите:

Screenshot of program

0 голосов
/ 04 апреля 2012

Похоже, что с тем, что вы пытаетесь сделать, вам будет проще, если вы сделаете его UserControl:

MSDN - Наследуйте от UserControl

Обычно в Visual Studio вы «добавляете» в свой проект новый «пользовательский элемент управления», который выглядит почти как форма.Добавьте к нему панель или PictureBox для вашего изображения, а затем справа от него добавьте ваш TextBox.Измените размер формы, чтобы она соответствовала вашим элементам управления.Создайте несколько свойств для отображения свойства Text TextBox и, возможно, свойства для установки изображения, а затем скомпилируйте.После компиляции ваш пользовательский элемент управления появится на панели инструментов, как если бы это был любой другой элемент управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...