0

我的 C# winform 项目有问题。

我有绘制正方形的功能:

public void DrawingSquares(int x, int y)
{
  System.Drawing.Graphics graphicsObj;
  graphicsObj = this.CreateGraphics();
  Pen myPen = new Pen(System.Drawing.Color.Black, 5);
  Rectangle myRectangle = new Rectangle(x, y, 100, 100);
  graphicsObj.DrawRectangle(myPen, myRectangle);
}

private void button1_Click(object sender, EventArgs e)
{
  z = Convert.ToInt16(textBox1.Text)-1;
  k = Convert.ToInt16(textBox2.Text)-1;
  DrawAllSquares();
}

private void DrawAllSquares()
{
  int tempy = y;
  for (int i = 0; i < z; i++)
  {
    DrawingSquares(x, y);
    for (int j = 0; j < k - 1; j++)
    {
      tempy += 50;
      DrawingSquares(x, tempy);
    }
    x += 50;
    tempy = y;
  }
}

在我的项目中,我有一个函数用于在运行时在表单中移动按钮,但是当按钮移动到绘图上时,绘图被删除。

我该怎么做才能使绘图永久化?

4

1 回答 1

2

如果您需要永久(就应用程序生命周期而言),无论如何,您需要在您内部使用它Control'sControl必须绘制矩形),OnPaint方法。

如果您也需要一个animation:它可以通过使用 atimer并更改您传递给您的参数的坐标来解决DrawSquares

希望这可以帮助。

编辑

伪代码:

public class MyControl : Control 
{
    public override void OnPaint(PaintEventArgs e)
    {
       base.OnPaint(e); 

       DrawingSquares(e.Graphics, valueX, valueY);
    }

    public void DrawingSquares(Graphics graphicsObj, int x, int y)
    {      
       Pen myPen = new Pen(System.Drawing.Color.Black, 5);
       Rectangle myRectangle = new Rectangle(x, y, 100, 100);
       graphicsObj.DrawRectangle(myPen, myRectangle);
    }

}

valueX并且是您希望绘制矩形valueY的相对坐标X和坐标。Y

这些坐标可以是常数值,或者您可以从某个计时器更改它们并调用Invalidate()on MyControl,因此将执行绘制。

于 2012-04-22T14:27:41.637 回答