如何给winform的control添加居中显示的背景水印
时间: 2023-05-30 08:04:53 浏览: 214
1. 首先需要创建一个自定义控件,继承自需要添加背景水印的控件(如TextBox、ComboBox等)。
2. 在自定义控件的构造函数中,设置控件的背景色为透明。
3. 重写自定义控件的OnPaint方法,在方法中绘制背景水印。
4. 在自定义控件的TextChanged事件中,判断控件中是否有文本,如果有则隐藏水印,否则显示水印。
下面是一个示例代码:
```
public class WatermarkTextBox : TextBox
{
private string _watermarkText = "请输入...";
private Color _watermarkColor = Color.LightGray;
private bool _showWatermark = true;
public WatermarkTextBox()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
BackColor = Color.Transparent;
}
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[DefaultValue("请输入...")]
public string WatermarkText
{
get { return _watermarkText; }
set
{
_watermarkText = value;
Invalidate();
}
}
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[DefaultValue(typeof(Color), "LightGray")]
public Color WatermarkColor
{
get { return _watermarkColor; }
set
{
_watermarkColor = value;
Invalidate();
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (_showWatermark && string.IsNullOrEmpty(Text))
{
using (var brush = new SolidBrush(_watermarkColor))
{
var stringFormat = new StringFormat
{
LineAlignment = StringAlignment.Center,
Alignment = StringAlignment.Center
};
e.Graphics.DrawString(_watermarkText, Font, brush, ClientRectangle, stringFormat);
}
}
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
_showWatermark = string.IsNullOrEmpty(Text);
Invalidate();
}
}
```
使用时,只需要在窗体中将原来的TextBox控件替换成WatermarkTextBox即可。例如:
```
var textBox = new WatermarkTextBox
{
Location = new Point(10, 10),
Size = new Size(200, 30),
WatermarkText = "请输入用户名",
WatermarkColor = Color.Gray
};
this.Controls.Add(textBox);
```
阅读全文