从控件中绘制图像

时间:2010-11-15 15:52:09

标签: c# winforms

我有一个控件。这是一个文本框。我想在控件的左边画一个图像。图像应涂在控件外面。我可以画一个但是在里面。

以下是代码:

  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);
     }
  }

4 个答案:

答案 0 :(得分:2)

创建一个由TextBox和PictureBox组成的用户控件。然后在用户控件的OnPaint事件中,您将能够在文本框外部绘图(在PictureBox控件中)。

这是UserControl的外观图片。它包含PictureBox和TextBox。

alt text

如果您只想绘制图标,则只需将其指定给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);
    }
  }