2016-01-08 4 views
1

Я хочу создать настраиваемый элемент управления или переопределить событие onpaint пиктограммы, чтобы получить доступ к изображению до его рисования в picturbox, чтобы я мог поворачивать изображение ,Override Picturbox OnPaint Событие для поворота изображения -Создание пользовательского Picturebox

Я знаю, что я могу сделать что-то вроде этого

private void pictureBox1_Paint(object sender, PaintEventArgs e) { 

    e.Graphics.DrawRectangle(Pens.Black, new Rectangle(10, 10, 20, 20)); 
} 

Как получить доступ к изображению и, как создать пользовательский элемент управления.

+0

Я не думаю, что изображение нарисовано в методе onPaint; ни BackgroundImage. Это действительно три разные вещи или уровни отображения. Но я думаю, вы можете скрыть свойство Image и заменить его на свой собственный. – TaW

ответ

3

Вот краткий пример подкласса: Он скрывает оригинальное Image свойство и заменяет его на тот, который делает поворот перед назначением его:

class RotatedPictureBox : PictureBox 
{ 

    private Image image; 

    public new Image Image { 
     get { return image; } // ?? you may want to undo the rotation here ?? 
     set { 
       Bitmap bmp = value as Bitmap ; 
       // use the rotation you need! 
       if (bmp != null) bmp.RotateFlip(RotateFlipType.Rotate270FlipX); 
       image = bmp; 
       base.Image = Image; 
      } 
     } 


    } 
    public RotatedPictureBox() 
    { 
    } 
} 

РИСКОВАННОЙ: Назначение изображения, кажется, работает, но Я не тестировал его для всех возможных применений. Известные ограничения

  • Он не поворачивает изображения, назначенные через ImageLocation.
  • У меня был сбой один раз, при назначении изображения в Дизайнере, но он не может воспроизвести.
+0

Я смог воспроизвести проблему Bitmap bmp = value как Bitmap; бросает исключение нулевой ссылки при первоначальном запуске кода. Не устанавливая это свойство изначально. – techno

+0

Можно использовать свойство 'DesignMode', чтобы исключить некоторые строки или, конечно же, проверить значение' value! = Null'. – TaW

+0

вы можете зайти на сайт http://chat.stackoverflow.com/rooms/100141/picturebox-c – techno