Нарисуйте изображение из-под контроля - PullRequest
1 голос
/ 15 ноября 2010

У меня есть контроль. Это текстовое поле. Я хочу нарисовать изображение слева от элемента управления. Изображение должно быть нарисовано вне контроля. Я мог бы нарисовать это один, но внутри.

Вот код:

  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 ]

2 голосов
/ 15 ноября 2010

Создание пользовательского элемента управления, состоящего из TextBox и PictureBox. Затем в событии OnPaint вашего пользовательского элемента управления вы сможете рисовать вне текстового поля (в элементе управления PictureBox).

Вот изображение того, как может выглядеть UserControl. Он содержит PictureBox и TextBox.

alt text

Если вы просто хотите нарисовать значок, вам просто нужно назначить его в PictureBox. Так что OnPaint может не понадобиться в вашем случае.

2 голосов
/ 15 ноября 2010

Вместо того, чтобы рисовать изображение, вы можете создать соответствующий элемент управления, например PictureBox, со свойством Image, установленным на соответствующий ресурс изображения.

Возможно, это будет легче сделать во время разработкиа не время выполнения.Если изображение не должно отображаться в начале, установите для его свойства Visible значение false во время разработки и установите для него значение true во время выполнения, когда изображение должно отображаться.

1 голос
/ 15 ноября 2010

Вместо перегрузки метода TextBox.OnPaint необходимо перегрузить метод Form (или любого другого родительского компонента TextBox) OnPaint и нарисовать изображение слева от TextBox.Вы не можете иметь TextBox ничью в области за ее пределами.

0 голосов
/ 15 ноября 2010

Я могу получить родителя и использовать его для рисования.

  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);
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...