避免在自定义TextBox中重叠图像和文本?

时间:2012-04-02 14:27:42

标签: winforms user-controls

我从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 个答案:

答案 0 :(得分:2)

我曾做过类似的事情。最简单的方法是创建一个像BradRem建议的UserControl,然后将一个无边框TextBox放在一个与TextBox具有相同背景颜色的Panel中。在此面板的左侧,您可以放置​​图标。作为一个完整的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

答案 1 :(得分:0)

如果您将其设为UserControl,听起来就像您尝试做的那样会更容易:

MSDN - Inherit from the UserControl

通常,在Visual Studio中,您向项目“添加”一个新的“用户控件”,它看起来几乎像一个表单。添加一个面板或PictureBox为您的图像,然后在其右侧添加您的TextBox。将表单缩小到适合您的控件。创建一些属性以显示TextBox的Text属性,并可能创建一个属性来设置图像然后进行编译。编译完成后,您的用户控件将显示在工具箱中,就像它是任何其他控件一样。