使用OnPaint()方法

时间:2013-04-30 07:30:07

标签: c# winforms qr-code onpaint

我正在使用this library将QRcode生成到WinForm应用程序中,但我真的不知道如何使用OnPaint()方法。

所以我有这个:

public partial class Form1 : Form
{
  public Form1()
  {
    InitializeComponent();
  }

  protected override void OnPaint(PaintEventArgs e)
  {
    QrEncoder encoder = new QrEncoder(ErrorCorrectionLevel.M);
    QrCode qrCode;
    encoder.TryEncode("link to some website", out qrCode);

    new GraphicsRenderer(new FixedCodeSize(200, QuietZoneModules.Two))
                             .Draw(e.Graphics, qrCode.Matrix);

    base.OnPaint(e);
  }

  private void Form1_Load(object sender, EventArgs e)
  {
    this.Invalidate();
  }
}

我在表单中有一个简单的pictureBox,我只想在那里生成QRcode图像(如果可以在图片框中生成它)。

2 个答案:

答案 0 :(得分:1)

如果您将图像放在图片框中并且只生成一次图像,那么您不必担心绘制方法(您不是在做动画等,它只是一个QR码)

只需在表单加载中(或在您生成图像的位置)执行此操作

mypicturebox.Image = qrCodeImage;

更新 - 为您的图书馆提供便利的附加代码

    var bmp = new Bitmap(200, 200);
    using (var g = Graphics.FromImage(bmp))
    {
        new GraphicsRenderer(
            new FixedCodeSize(200, QuietZoneModules.Two)).Draw(g, qrCode.Matrix);
    }
    pictureBox1.Image = bmp;

答案 1 :(得分:0)

这就是我最终做的事情:

public partial class Form1 : Form
    {
        public event PaintEventHandler Paint;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox_Paint);
            this.Controls.Add(pictureBox1);
        }

        private void pictureBox_Paint(object sender, PaintEventArgs e)
        {
            QrEncoder encoder = new QrEncoder(ErrorCorrectionLevel.M);
            QrCode qrCode;
            encoder.TryEncode("www.abix.dk", out qrCode);

            new GraphicsRenderer(
                new FixedCodeSize(200, QuietZoneModules.Two)).Draw(e.Graphics, qrCode.Matrix);
        }
    }