我做了一个英文打字游戏,加了一个button控件控制游戏的音乐,可是一按了button控件我的游戏打字就不行了!按了键盘,那字母就是没有什么反应,我想那个应该是焦点移动的问题,可具体怎样弄我就不懂了!在网上找资料弄了半天就是弄不出来!请各位兄弟姐妹帮个忙咯!谢谢。。
下面是代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace 英语字母练习
{
    public partial class Form1 : Form
    {
        Random rnd = new Random();
        Point[] p = new Point[6];//定义成成员变量,所有方法都可以使用
        int a = 6, b = 0,k=0;//z 为出现字符总数,q 表示击中的个数
        Label[] lab = new Label[6];//定义数组用来存放标签 其中数组的定义可以是 类名[] 数组名 =new 类名[];
        public Form1()
        {
            InitializeComponent();
        }        private void label1_Click(object sender, EventArgs e)
        {        }        private void label2_Click(object sender, EventArgs e)
        {        }        private void Form1_Load(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.URL = "最炫民族风.mp3";             //初始化标签的位置
            p[0] = new Point(100, 100);
            p[1] = new Point(300,300);
            p[2] = new Point(500,200);
            p[3] = new Point(700,450);
            p[4] = new Point(900,350);
            p[5] = new Point(1100,600);
            //对Label数组进行初始化
            lab[0] = label1;
            lab[1] = label2;
            lab[2] = label3;
            lab[3] = label4;
            lab[4] = label5;
            lab[5] = label6;
            //Random rnd = new Random();
            for (int i = 0; i < 6; i++)
            {//生成A-Z以及1-8的ASCII值
               rang (i);
            }        }
        private void rang(int i)
        {
            //生成A-Z以及1-8的ASCII值
                //Random rnd = new Random();
                int r = rnd.Next(48, 91);
                while (57 < r && r < 65)
                {
                    r = rnd.Next(48, 91);
                }
                char c = (char)r;
                lab[i].Text = c.ToString();
                lab[i].Location = p[i];           
        }        private void label3_Click(object sender, EventArgs e)
        {        }        private void label4_Click(object sender, EventArgs e)
        {        }        private void timer1_Tick(object sender, EventArgs e)
        {
            p[0].Y += 10;
            p[1].Y += 5;
            p[2].Y += 8;
            p[3].Y += 2;
            p[4].Y += 6;
            p[5].Y += 7;
            //重新定位标签
            for (int i = 0; i < 6; i++)
            {
                lab [i].Location =p[i];
            }            for (int i = 0; i < 6; i++)
            {
                if (p[i].Y >= Height)
                {
                    p[i].Y = 0;
                    rang(i);
                    a++;
                    k++;
                }
                
            }
            
        }
           
        private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            string ste= Char .  ToUpper(e.KeyChar ).ToString ();
        for (int i=0;i<6;i++)
        {            if (ste == lab[i].Text)
            {
                lab[i].Visible = false;
                pictureBox1.Visible = true;                pictureBox1.Location = p[i];
                p[i].Y = 0;
                b++;
                rang(i);
                a++;
                k++;
                break;            }
        } 
           
           
            timer2.Enabled = true;        }        private void timer2_Tick(object sender, EventArgs e)
        {
            for (int i = 0; i < 6; i++)
            {
                lab[i].Visible = true;
            }            pictureBox1.Visible = false;            timer2.Enabled = false;
        }        private void label5_Click(object sender, EventArgs e)
        {        }        private void timer3_Tick(object sender, EventArgs e)
        {
            float c = (float)(b) / a * 100;
            int d = k-b;
            label7.Text = "字母、数字出现的个数:" + a.ToString();
            label8.Text = "打中的正确个数:" + b.ToString();
            label9 .Text ="错误的个数:"+d.ToString ();
            label10.Text = "打中的正确率:" + c.ToString()+"%";
        }        private void button1_Click(object sender, EventArgs e)
        {           
            if (button1.Text == "音乐:关")
            {
                axWindowsMediaPlayer1.Ctlcontrols.pause ();
                button1.Text = "音乐:开";            }
            else if (button1.Text == "音乐:开")
            {
                axWindowsMediaPlayer1.Ctlcontrols.play();
                button1.Text = "音乐:关";            }
        }
    }
}

解决方案 »

  1.   

    private void button1_Click(object sender, EventArgs e)
      {    
      if (button1.Text == "音乐:关")
      {
      axWindowsMediaPlayer1.Ctlcontrols.pause ();
      button1.Text = "音乐:开";  }
      else if (button1.Text == "音乐:开")
      {
      axWindowsMediaPlayer1.Ctlcontrols.play();
      button1.Text = "音乐:关";  }
    //这里加
    你要输入的文字框的对象.Focus();//让其获得焦点
      }
      }
      

  2.   

    我想加,可是怎么就是有错误呢!错误的内容是:错误 1 非静态的字段、方法或属性“System.Windows.Forms.Control.Focus()”要求对象引用
      

  3.   

    比如窗体名字是form1
    那就在开关音乐的最后一行写form1.focus();
      

  4.   

    private void button1_Click(object sender, EventArgs e)
      {    
      if (button1.Text == "音乐:关")
      {
      axWindowsMediaPlayer1.Ctlcontrols.pause ();
      button1.Text = "音乐:开";  }
      else if (button1.Text == "音乐:开")
      {
      axWindowsMediaPlayer1.Ctlcontrols.play();
      button1.Text = "音乐:关";  }可我每当在这里加这个Form.Focus();//都会有错误啊!错误 1 非静态的字段、方法或属性“System.Windows.Forms.Control.Focus()”要求对象引用 
      }郁闷了好几天了呢!!请大哥帮忙啊!!
      

  5.   

    Form.Focus();Form是类名,form1就是对象名你要用实例化出来的对象 Focus();不行用this.Focus();试试
      

  6.   

    退一步 ,海阔天空你捕捉键盘的事件在form窗体
    Form1_KeyPress你在button同样补抓按键即可
    button_KeyPress或者button有个属性是虾米ishitfocus()