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

(アプリケーションの存続期間の観点から)永続的に必要な場合は、どうしても、 OnPaintメソッドの内部Control'sControl長方形を描画する必要がある場所)で使用する必要があります。

必要な場合animationも:を使用し、パラメータのようにに渡す座標を変更することで解決できます。timerDrawSquares

お役に立てれば。

編集

擬似コード:

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相対座標です。XY

これらの座標は定数値にすることも、タイマーから変更して呼び出すことInvalidate()MyControlできるので、ペイントが実行されます。

于 2012-04-22T14:27:41.637 に答える