0

我在计数时遇到问题ToString();我试图让程序在每次用户说出其中一种动物的名字后添加一个数字,例如 1、2 然后 3,从而在计数显示(记分板)上添加一个数字,这将是显示在lblCount标签内供用户查看

目前我什么都有这个

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SpeechLib;
using System.IO;
using System.Speech.Recognition;
using System.Globalization;

namespace SimpleSpeechRecognition
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private SpeechRecognitionEngine recognizer;

        private void Form1_Load(object sender, EventArgs e)
        {

            //speechListBox1.Enabled = true;
            panel1.Enabled = false;
            panel2.Enabled = false;

            pictureBox2.Image = Image.FromFile(@"C:\animals\" + "happy.jpg");
            lblTitle2.Text = "WELCOME";

            pictureBox1.Image = Image.FromFile(@"C:\animals\" + "zoo.jpg");
            lblTitle.Text = "WELCOME";

            speechListBox1.Items.Add("Dog");
            speechListBox1.Items.Add("Elephant");
            speechListBox1.Items.Add("Cat");
            speechListBox1.Items.Add("Bird");
            speechListBox1.Items.Add("Rabbit");

            recognizer = new SpeechRecognitionEngine(new CultureInfo("EN-US"));
            recognizer.SetInputToDefaultAudioDevice();

            Choices choices = new Choices("Dog", "Elephant", "Cat", "Bird", "Rabbit");
            GrammarBuilder m_GrammarBuilder = new GrammarBuilder(choices);
            Grammar m_Speech = new Grammar(m_GrammarBuilder);
            recognizer.LoadGrammar(m_Speech);

            recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
            recognizer.RecognizeAsync(RecognizeMode.Multiple);
        }

        void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
                //

            foreach (RecognizedWordUnit word in e.Result.Words)
            {
                int count = 0;
                count += 1;

                switch (word.Text)

                {
                    case "Dog":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "dog.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "DOG";
                        lblCount.Text = count.ToString();
                        break;
                    case "Elephant":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "elephant.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "ELEPHANT";
                        lblCount.Text = count.ToString();
                        break;
                    case "Cat":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "cat.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "CAT";
                        lblCount.Text = count.ToString();
                        break;
                    case "Bird":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "bird.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "BIRD";
                        lblCount.Text = count.ToString();
                        break;
                    case "Rabbit":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "rabbit.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "RABBIT";
                        lblCount.Text = count.ToString();
                        break;
                }
            }
        }

        private void SayPhrase(string PhraseToSay)
        {

            SpeechVoiceSpeakFlags SpFlags = new SpeechVoiceSpeakFlags();
            SpVoice Voice = new SpVoice();
            Voice.Speak(PhraseToSay, SpFlags);

        }

        private void speechListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            SayPhrase(speechListBox1.SelectedItems[0].ToString());
            pictureBox1.Refresh();
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            panel1.Enabled = true;
            panel2.Enabled = false;
            speechListBox1.Enabled = true;
            pictureBox1.Enabled = true;
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            panel1.Enabled = false;
            panel2.Enabled = true;
            speechListBox1.Enabled = false;
            pictureBox1.Enabled = false;
        }
    }
}

这是我正在为这个标签工作的部分

void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {

            foreach (RecognizedWordUnit word in e.Result.Words)
            {
                int count = 0;
                count += 1;

                switch (word.Text)

                {
                    case "Dog":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "dog.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "DOG";
                        lblCount.Text = count.ToString();
                        break;
                    case "Elephant":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "elephant.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "ELEPHANT";
                        lblCount.Text = count.ToString();
                        break;
                    case "Cat":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "cat.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "CAT";
                        lblCount.Text = count.ToString();
                        break;
                    case "Bird":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "bird.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "BIRD";
                        lblCount.Text = count.ToString();
                        break;
                    case "Rabbit":
                        pictureBox1.Image = Image.FromFile(@"C:\animals\" + "rabbit.jpg");
                        this.pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                        lblTitle.TextAlign = ContentAlignment.MiddleCenter;
                        lblTitle.Text = "RABBIT";
                        lblCount.Text = count.ToString();
                        break;
                }
            }
        }
4

2 回答 2

2

我不确定我是否完全理解您的问题,但我确实看到了一个相当明显的错误:

        foreach (RecognizedWordUnit word in e.Result.Words)
        {
            int count = 0;
            count += 1;

每次循环都会将计数重置为 0,然后立即将其加 1,因此您的标签将始终显示为 1。

只需将初始化程序移出循环即可。

        int count = 0;
        foreach (RecognizedWordUnit word in e.Result.Words)
        {
            count += 1;
于 2013-03-22T20:22:54.243 回答
0

如果您想显示程序生命周期内的总计数,则需要将计数变量移动为表单的成员。像这样:

public partial class Form1 : Form
{  
     private int count = 0;
     // ...
}

然后将您的事件处理程序更改为:

void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {

        foreach (RecognizedWordUnit word in e.Result.Words)
        {
            count += 1;
于 2013-03-22T20:23:41.227 回答