在文本更改时重置最后绘制图形

时间:2014-05-21 04:33:32

标签: c# winforms

我有四个用于绘制矩形的文本框,它是x,y,高度和宽度,我想在文本更改时绘制矩形但是当我重置图像时不绘制矩形(`picturebox1.Image = bkp)我做错了帮我manz?

if (txtHeight.Text != "" && txtLeftMargin.Text != "" && txtTopMargin.Text != "" && txtWidth.Text != "")
            {
            pictureBox1.Image = bkp;
            Pen pen = new Pen(Color.Red);
            Graphics g = pictureBox1.CreateGraphics();
            g.DrawRectangle(pen, Convert.ToInt16(txtLeftMargin.Text), Convert.ToInt16(txtTopMargin.Text), Convert.ToInt16(txtHeight.Text), Convert.ToInt16(txtWidth.Text));

            }

2 个答案:

答案 0 :(得分:1)

尝试使用此代码:

   Image backgroundImage = (Image)bkp.Clone();

   using (Graphics gfx = Graphics.FromImage(backgroundImage))
   using (Pen pen = new Pen(Color.Red))
   {
      gfx.DrawRectangle(pen,
                        Convert.ToInt16(txtLeftMargin.Text),
                        Convert.ToInt16(txtTopMargin.Text),
                        Convert.ToInt16(txtHeight.Text),
                        Convert.ToInt16(txtWidth.Text));
   }

   pictureBox1.Image = backgroundImage;

检查“bkp” -image是否为空并且大于1x1,或者您看不到任何东西。否则它应该工作。我用“Image.FromFile()”对它进行了测试,我将硬盘中的图像加载到“backgroundImage” - 变量。图像的尺寸设置了最大绘图区域。

答案 1 :(得分:0)

正如许多其他人一样,你没有采取正确的方式:

您在winforms中绘制的所有内容都必须在控件的paint事件中绘制,或者从那里触发。所以你必须:

  • 在某处保留text Rectangle的几何数据(如果这就是你正在做的事情),
  • 将绘图放入paint事件(使用事件参数中的e.Graphics)和
  • 通过invalidating控件启动它..