我有一个控件。这是一个文本框。我想在控件的左边画一个图像。图像应涂在控件外面。我可以画一个但是在里面。
以下是代码:
private static Image requiredIcon = Resources.Icon_required;
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (base.Enabled && string.IsNullOrEmpty(base.Text))
{
e.Graphics.DrawImage(requiredIcon, 0, 0);
}
}
答案 0 :(得分:2)
创建一个由TextBox和PictureBox组成的用户控件。然后在用户控件的OnPaint事件中,您将能够在文本框外部绘图(在PictureBox控件中)。
这是UserControl的外观图片。它包含PictureBox和TextBox。
如果您只想绘制图标,则只需将其指定给PictureBox即可。因此,在您的情况下可能不需要OnPaint。
答案 1 :(得分:2)
您可以创建适当的控件,而不是绘制图像,例如PictureBox
,将Image
属性设置为适当的图像资源。
在设计时而不是运行时可能更容易做到这一点。如果图像不应该是初始显示,请在设计时将其Visible
属性设置为false,并在运行时将其设置为true,以便显示图像。
答案 2 :(得分:1)
不必重载TextBox.OnPaint
方法,而是必须重载Form(或任何TextBox的父组件)OnPaint
方法,并在{的左侧绘制Image。 {1}}。你无法将TextBox
绘制到自己范围之外的区域。
答案 3 :(得分:0)
我可以得到父母并将其用于绘画。
protected override void OnParentChanged(EventArgs e)
{
base.OnParentChanged(e);
base.Parent.Paint += new PaintEventHandler(Parent_Paint);
}
private void Parent_Paint(object sender, PaintEventArgs e)
{
if (base.Enabled && string.IsNullOrEmpty(base.Text))
{
e.Graphics.DrawImage(requiredIcon, 0, 0);
}
}