C#五子棋开发问题:下棋不见棋子,但是把窗体拖出屏幕外又拖回来,来回几次,棋子有在棋盘上(刚才鼠标点击的地方)。
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace Gobang
{
    public partial class GobangFrm : Form
    {
        int[,] arr = new int[15, 15];
        private PictureBox[,] GobangpictureBox = new PictureBox[15, 15];
        public GobangFrm()
        {
           InitializeComponent();
           GobangBox.Paint += new PaintEventHandler(GobangBox_Paint);
           GobangBox.MouseClick += new MouseEventHandler(GobangBox_MouseClick);
        }
        private void GobangBox_Paint(object sender, PaintEventArgs e)//画棋盘和重绘棋子
        {
            Graphics paper = e.Graphics;
            Pen pen = new Pen(Color.Black, 2);
            SolidBrush Brush = new SolidBrush(Color.White);
            for (int l = 0; l < 600; l += 40)
            {
                paper.DrawLine(pen, 20, l + 20, 580, l + 20);//画横线
                paper.DrawLine(pen, 20 + l, 20, l + 20, 580);//画竖线
            }
            paper.FillEllipse(Brush, 297, 297, 5, 5);
            //下面是重绘代码
            for (int i = 0; i < 15; i++)
                for (int j = 0; j < 15; j++)
                {
                    if (arr[i, j] == 1)
                    {
                        int m = i * 40 + 4;
                        int n = j * 40 + 4;
                        Graphics Repaper=e.Graphics;
                        Repaper = GobangBox.CreateGraphics();
                        Image pic = Image.FromFile("white.gif");
                        Repaper.DrawImage(pic, m, n, 30, 30);
                    }
                }
        }
        private void GobangBox_MouseClick(object sender, MouseEventArgs e)//下棋
        {
            if (e.Button == MouseButtons.Left)//判断是否点的是鼠标左键
            {
                double h = (e.X) / 40;
                double t = (e.Y) / 40;
                int i = (int)Math.Floor(h);
                int j = (int)Math.Floor(t);
                int m = i * 40 + 4;
                int n = j * 40 + 4;
                GobangpictureBox[i,j] = new PictureBox();
                GobangpictureBox[i, j].Image = global::Gobang.Properties.Resources.white;
                arr[i, j] = 1;
            }        }
     }
}想要解决的问题:1。当鼠标点击时把棋子显示出来、2。当把窗体最小化还原后棋子不消失或者把窗体拖出屏幕外在托回来后棋子不消失。

解决方案 »

  1.   

         if (flag)
                    {
                        paper.DrawImage(imgBlackStone, m * 40, n * 40, imgBlackStone.Width, imgBlackStone.Height);
                    }
                    else
                    {
                        paper.DrawImage(imgWhiteStone, m * 40, n * 40, imgWhiteStone.Width, imgWhiteStone.Height);
                    }楼主可以参考参考这,,
    http://www.cnblogs.com/esshs/archive/2005/04/01/129824.html
      

  2.   

         if (flag)
                    {
                        paper.DrawImage(imgBlackStone, m * 40, n * 40, imgBlackStone.Width, imgBlackStone.Height);
                    }
                    else
                    {
                        paper.DrawImage(imgWhiteStone, m * 40, n * 40, imgWhiteStone.Width, imgWhiteStone.Height);
                    }楼主可以参考参考这,,
    http://www.cnblogs.com/esshs/archive/2005/04/01/129824.html
      

  3.   

    http://www.cnblogs.com/esshs/archive/2005/04/01/129824.html
      

  4.   

    这里有个五子棋的例子,你可以参考一下:
    http://download.csdn.net/detail/linxi729778865/3056350
      

  5.   


    内附下载地址http://files.cnblogs.com/esshs/FiveStones(v1.0.0).rar
      

  6.   

    在任何你想重绘棋子的时候触发的事件里面重绘一下GobangBox,Refresh或者什么的
      

  7.   

    arr[i, j] = 1;
    下面加上GobangBox.Refresh();