Я разрабатываю игру HangMan, чтобы узнать, как использовать C# с DevExpress. Моя проблема заключается в том, что я рисую сообщение с размером относительно размера панели, в которую я его вставляю, так что его размер пересчитывается, если размер окна изменяется. Мой код выглядит так:Изображение дублируется, когда окно максимально
namespace HangMan
{
public partial class HangMan : Form
{
public HangMan()
{
InitializeComponent();
this.Paint += new System.Windows.Forms.PaintEventHandler(HangMan_Paint);
}
void drawHangPost()
{
//Use panel size percentages to draw the post
double dWidth = pnlHang.Width; double dHeight = pnlHang.Height;
int x1 = (int)Math.Round(0.8 * dWidth); int x2 = (int)Math.Round(0.45 * dWidth);
int y1 = (int)Math.Round(dHeight); int y2 = (int)Math.Round(0.23 * dHeight);
int xInit = x1; int xFinal = x1 - x2;
int yInit = y1; int yMiddle = 10; int yFinal = y2;
//Paint Post
Graphics g = pnlHang.CreateGraphics();
Pen p = new Pen(Color.Brown, 10);
g.DrawLine(p, new Point(xInit, yInit), new Point(xInit, yMiddle));
g.DrawLine(p, new Point(xInit, yMiddle), new Point(xFinal, yMiddle));
g.DrawLine(p, new Point(xFinal, yMiddle), new Point(xFinal, yFinal));
}
private void HangMan_Paint(object sender, EventArgs e)
{
drawHangPost();
}
}
}
Это отлично работает для меня, а размер чертежа изменяется. Однако, когда я изменяю размер окна вручную, на каждом шаге нарисован новый пост, поэтому многие из них появляются. Если я максимизирую окно, появятся два столбца двух разных размеров.
Тем не менее, когда я сворачиваю окно и открываю его снова, остается только правильный рисунок. Есть ли способ эриентировать предыдущие рисунки, когда нарисован новый?
Должен ли я включать какую-то команду эзотерики писать после InitializeComponent()?
Попробуйте 'pnlHang.Invalidate()' в событии OnResize формы. – SimpleVar
Как @SimpleVar говорит или использует свойство 'Control.ResizeRedraw' - – adv12
@ adv12 Это хорошая собственность, которая не знала этого - thx! : D – SimpleVar