积极答复者
C#绘图的问题

问题
-
是这样的:我在用C#做一个五子棋的程序,在一个窗体上画了一棋盘,在棋盘上点击鼠标画棋子,整个过程都是用GDI+完成,本来功能也都基本实现了,但是在添加了改变窗体背景色的功能之后,只要一点击按钮改变背景色,画好的棋盘还在,而本来已经画好的棋子却随着背景色改变了,请问问题出在哪里呢??
private void MainFrm_Paint(object sender, PaintEventArgs e)//画棋盘
{
DrawTable();
}private void blue_Click(object sender, EventArgs e) //切换背景色(蓝)
{
this.BackColor = Color.RoyalBlue;
}
答案
-
如果你采用Paint事件来绘制图形,那么所绘制的图形都是在背景上绘制的,包括棋盘。当改变背景色时会重绘图形,这时棋盘也没了,不过由于你的Paint事件是最后调用的,所以你最后看到的棋盘是在背景色覆盖了旧棋盘后,重新绘制的。
对于这种游戏界面,最好的方案是,你创建2个新的控件,棋盘和棋子,各override OnPaint方法。然后在Frame上拖放一个棋盘控件,下子时,在你点击的位置创建一个棋子控件实例。这样的设计才是最好最灵活的。
- 已标记为答案 jepensedoncjesuis 2011年4月29日 9:57
全部回复
-
如果你采用Paint事件来绘制图形,那么所绘制的图形都是在背景上绘制的,包括棋盘。当改变背景色时会重绘图形,这时棋盘也没了,不过由于你的Paint事件是最后调用的,所以你最后看到的棋盘是在背景色覆盖了旧棋盘后,重新绘制的。
对于这种游戏界面,最好的方案是,你创建2个新的控件,棋盘和棋子,各override OnPaint方法。然后在Frame上拖放一个棋盘控件,下子时,在你点击的位置创建一个棋子控件实例。这样的设计才是最好最灵活的。
- 已标记为答案 jepensedoncjesuis 2011年4月29日 9:57