效果:
描述:
本来是想用GDI在左边画图片上去的,文本是居中对齐,如果文本是左对齐,文本会把图片遮住控件长这样:
![](https://i-blog.csdnimg.cn/blog_migrate/1219e6abd058698e0187931e5f7cd7cc.png)
但这样做,输入框在获取焦点时候,会把图片挡住就像这样:
![](https://i-blog.csdnimg.cn/blog_migrate/4708244c8e05faadbfff98f8de53b41d.png)
输入完成之后图片就会显示完整。所以我又采用了PictureBox+TextBox组合的方式来完成这种效果。完成这种效果需要完成以下步骤:
0.分别设置PictureBox和TextBox的控件的Anchor和Dock属性,这样在窗体上拉动控件大小的时候,图片框和文本输入框能一起变大;
1.调整TextBox的border为none;
2.调整PictureBox的backColor为White;
3.调整作为控件载体的UserControl的BackColor为White;
4.设置作为控件载体的UserControl的BorderStyle为FixedSingle;因为这里需要重绘UserContorl的边框就需要这样的设置,我这里重绘成了DarkRed颜色。
提醒:
如果你想写一些文本框的事件就要像定义MyTextChanged那样暴露出来。还有就是,这里如果override UserControlde的OnPaint方法我是没能完成控件边框的重绘。
(我也不清楚什么时候重写WndProc什么时候重写OnPaint。)
代码:
public partial class MyPicturerTextBox : UserControl { public MyPicturerTextBox() { InitializeComponent(); this.BorderStyle = BorderStyle.FixedSingle; } private Image userImg; [Description("文本框里的图片"