我从System.Windows.Forms.TextBox派生了一个新控件,它在客户区显示一个图像,如下图所示:
以下是代码:
public partial class UnitTextBox: TextBox {
public UnitTextBox() {
TextAlign = HorizontalAlignment.Right;
InitializeComponent();
Controls.Add(pictureBox1);
pictureBox1.Location = new Point(0, 0);
}
}
当我添加一些字符时,文本向左滚动并在图像下方。有没有办法填充文本区域?
答案 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);
}
}
...它看起来非常像你想要的结果:
答案 1 :(得分:0)
如果您将其设为UserControl,听起来就像您尝试做的那样会更容易:
MSDN - Inherit from the UserControl
通常,在Visual Studio中,您向项目“添加”一个新的“用户控件”,它看起来几乎像一个表单。添加一个面板或PictureBox为您的图像,然后在其右侧添加您的TextBox。将表单缩小到适合您的控件。创建一些属性以显示TextBox的Text属性,并可能创建一个属性来设置图像然后进行编译。编译完成后,您的用户控件将显示在工具箱中,就像它是任何其他控件一样。