c # CF, WinForms и двойной буфер - PullRequest
1 голос
/ 22 февраля 2009

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

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

Спасибо!

1 Ответ

5 голосов
/ 22 февраля 2009

Вам не нужна форма с двойной буферизацией, вам нужен 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 ...

...