用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;
using System.Drawing.Drawing2D;namespace TankWar
{
    public partial class Form1 : Form
    {
        int x=10, y=10;
        public Form1()
        {
            InitializeComponent();
            SetStyle(ControlStyles.Opaque,true);
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.FillRectangle  (Brushes.LimeGreen, ClientRectangle);            g.FillEllipse(Brushes.Red, new Rectangle(x, y, 25, 25));
        }
         void Form1_KeyDown(object sender, KeyEventArgs e)   
        {   
            switch (e.KeyCode)   
            {
                case Keys.Left: x -= 5; break; 
                case Keys.Up: y -=5; break;
                case Keys.Right: x +=5; break;   
                case Keys.Down: y +=5; break;      
            }   
        }   
        private void Form1_Load(object sender, EventArgs e)
        {
         }
    }
}

解决方案 »

  1.   

    在keydown事件里加refresh或invalidate
    还不行就在里面设置个断点看按方向键是否被捕捉,如果没有就想办法让它捕捉,记得是重写个方法,isinputkey什么的!
      

  2.   

    Keypreview 我已经改成true了。
      

  3.   

    void Form1_KeyDown(object sender, KeyEventArgs e)  
            {  
                switch (e.KeyCode)  
                { 
                    case Keys.Left: x -= 5; break; 
                    case Keys.Up: y -=5; break; 
                    case Keys.Right: x +=5; break;  
                    case Keys.Down: y +=5; break;      
                }  
                //加上这一句,你的坦克就能跑啦
                this.Refresh();
            }  
      

  4.   

    用这个来刷新?代价够高的啊,如果Paint代码复杂一点,估计会闪烁的
      

  5.   

    做游戏的话建议使用微软的XNA框架,或者C++了。