DevExpressでC#を使用する方法を学習するためにHangManゲームを設計しています。 私の問題は、私がそれを描いているパネルのサイズに相対的なサイズのポストを描画しているので、ウィンドウのサイズを変更するとそのサイズが再計算されるということです。私のコードは次のようになります:ウィンドウが最大化されるとイメージが複製されます
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();
}
}
}
これは私のために完全に動作し、投稿図面のサイズが変更されます。しかし、私は手動でウィンドウのサイズを変更すると、新しい投稿が各ステップで描画されるので、それらの多くが表示されます。ウィンドウを最大化すると、2つの異なるサイズの2つのポストが表示されます。
しかし、私がウィンドウを最小化して再び開くと、正しい描画だけが残ります。新しい図面が描かれたときに以前の図面を消滅させる方法はありますか?
の後にeraisingコマンド書き込みを含めるべきですか?InitializeComponent()?
フォームのOnResizeイベントで 'pnlHang.Invalidate()'を試してください。 – SimpleVar
@SimpleVarが言うように、または 'Control.ResizeRedraw'プロパティを使用してください - – adv12
@ adv12それは良いプロパティです、それを知らなかった - thx! :D – SimpleVar