У меня проблема с моим проектом 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;
}
}
В моем проекте есть функция, которую я использую для перемещения кнопки по форме во время выполнения, но когда кнопка перемещается на рисунок, рисунок удаляется.
Что я могу сделать, чтобы сделать рисунок постоянным?
Если вам нужно постоянно (с точки зрения времени жизни приложения), любыми способами, вам нужно использовать внутри вашего Control's
(Control
, где прямоугольник должен быть нарисован), метод OnPaint.
Если вам также нужна анимация
: это можно решить, используя таймер
и изменяя координаты, которые вы передаете как параметры в ваш DrawSquares
.
Надеюсь, это поможет.
EDIT
Псевдокод:
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()
на MyControl
, так что paint будет выполнен.