当前位置:编程学习 > C#/ASP.NET >>

请教一下,本人弄个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
    {
        public GobangFrm()//窗体初始化
        {
            InitializeComponent();
            GobangBox.MouseDown += new MouseEventHandler(GobangBox_MouseDown);
        }
        private void GobangFrm_Load(object sender, EventArgs e)//窗体加载函数
        {

        }
        private void GobangBox_Paint_1(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);

        }
        private void GobangBox_MouseDown(object sender, MouseEventArgs e)//鼠标在picturebox上下棋事件
        {
                double h = (e.X) / 40;
                double t = (e.Y) / 40;
                if (e.Button == MouseButtons.Left)//判断是否点的是鼠标左键
                {
                    int m = (int)Math.Floor(h) * 40 + 4;
                    int n = (int)Math.Floor(t) * 40 + 4;
                    Graphics paper;
                    paper = GobangBox.CreateGraphics();
                    Image pic = Image.FromFile("white.gif");
                    paper.DrawImage(pic, m, n, 30, 30);
                }
            }
        }

        private void GobangBox_MouseMove(object sender, MouseEventArgs e)//鼠标移动时在label上显示坐标
        {
            if (e.X < 600 && e.Y < 600)
            {
                //取下棋点
                double h = (e.X)/ 40;
                double t = (e.Y)/ 40;
                int m = (int)Math.Floor(h)+1;
                int n = (int)Math.Floor(t)+1;
                zblbl.Text = "X:" + m.ToString() + "  Y:" + n.ToString();
            }
        }
    }
}

各位大大看看,我在GobangBox_MouseDown里面下棋,但是如果把窗体移出屏幕外或者最小化还原后棋子消失,网上说是重写,小鸟不明白,恳求回复。 --------------------编程问答-------------------- 重绘问题没考虑吧 --------------------编程问答-------------------- 本人不懂如何处理,你的问题就是我要的,不知道能不能给个解决方案。 --------------------编程问答-------------------- GobangBox_MouseDown中记录下需要绘制的棋子位置
在GobangBox_Paint_1中把这个棋子都画上 --------------------编程问答--------------------
引用 1 楼 xingchen1008 的回复:
重绘问题没考虑吧


我以前做了一个  俄罗斯方块,坦克大战  的小游戏;
当窗体被 遮盖之后,在显示就发现 某些方块不见了;


因为程序没有将  没有在屏幕上显示的区域,再次显示时,进行重新绘制;

楼主可以判断,某些 事件:图片框 大小变化等,选择将 整个 图片框全部绘制,而不是只绘制一部分; --------------------编程问答-------------------- 顶!

   每次拖动窗体(mouseUp)时,强制刷新! --------------------编程问答-------------------- 大家都把我问题提出来了,就是不知道能不能给个代码来解决一下,不够三楼的想法不错,但是我想要的是重绘代码,而不是在paint()里面重做。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,