C# CF, WinForms и двойной буфер


1

У меня есть приложение CF 2.0 с PictureBox на форме. Я хочу переместить PictureBox с перемещением мыши, и мне нужно добавить Double Buffer в форму, чтобы избежать мерцания.

Как я могу это сделать?

Спасибо!

5

Вам не нужна форма с двойной буферизацией, вам нужен PB. Это не так-то просто в CF. Однако вы можете создать свой собственный контроль, PB довольно прост. Например:

using System; 
using System.Drawing; 
using System.Windows.Forms; 

public class MyPictureBox : Control { 
    private Image mImage; 
    public Image Image { 
    get { return mImage; } 
    set { mImage = value; Invalidate(); } 
    } 
    protected override void OnPaintBackground(PaintEventArgs pevent) { 
    // Do nothing 
    } 
    protected override void OnPaint(PaintEventArgs e) { 
    using (Bitmap bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height)) { 
     using (Graphics bgr = Graphics.FromImage(bmp)) { 
     bgr.Clear(this.BackColor); 
     if (mImage != null) bgr.DrawImage(mImage, 0, 0); 
     } 
     e.Graphics.DrawImage(bmp, 0, 0); 
    } 
    base.OnPaint(e); 
    } 
} 

Будем надеяться, что я не использовал материал, который не доступен в CF ...

  0

PB? В чем смысл ПБ? 22 фев. 092009-02-22 17:21:12

  0

PB == PictureBox. 22 фев. 092009-02-22 17:29:53

  0

Не работает. Мне нужен двойной буфер в форме, потому что я перемещаю весь PictureBox (я думаю). 22 фев. 092009-02-22 17:59:35

  0

Это правильный код, но то, что вам нужно сделать, это создать контейнер (например, панель), который будет выглядеть следующим образом. Худший случайный сценарий заключается в том, что вам придется поменять окно с картинкой на то, что вы вручную рисуете и управляете внутри панели. 23 фев. 092009-02-23 15:33:13

  0

Также работает как шарм при рисовании сложных вещей, требующих времени. I Предопределите растровое изображение, измените его размер по мере необходимости (в Form.ResizeEnd), нарисуйте материал (сплайны с 1000 точками) в растровое изображение и нарисуйте растровое изображение в PB. 31 авг. 152015-08-31 16:14:47