2013-06-03 79 views
1

我在我的应用程序中有一个语音类,并希望能够看到它是否正在侦听,录制,听写或无响应;布尔类型值

我想什么是可以做的是分配一些类型的变量(SpeechState)只是3个可能值1,和对证过,像这样:

startListeningButton_Click(object sender, EventArgs e) 
{ 
    SpeechState = SpeechState.Listening; 
} 

stopListeningButton_Click(object sender, EventArgs e) 
{ 
    if(SpeechState.Listening) 
    { 
     // Code to STOP listening goes here. 
    } 
} 

我曾尝试推行troolean,但这并不完全是我之后的事情。我以后东西与此类似:

if(checkBox1.CheckState == CheckState.Checked) 
{ 
    // Do something 
} 

我怎样才能做到这一点?

+5

使一个'SpeechState' [枚举](http://msdn.microsoft.com/en-us/library/sbbt4032(V = vs.110)的.aspx) ? –

+0

使用emumeration。 –

+1

Troolean:一种俚语,用于描述Microsoft Win32 API中许多地方使用的真/假/错误方案。它被用来描述什么时候某事有3个状态,相比之下,布尔有两个状态(通常是true或false)。 – RvdK

回答

14

你应该为此做一个enum

public enum SpeechState 
{ 
    Listening, 
    Recording, 
    Dictating, 
    Unresponsive 
} 

然后,您可以准确地用这个作为你的显示设置,虽然检查将是:

if(this.SpeechState == SpeechState.Listening) 

编辑回应评论:

为了将其放置在你的班上,你需要一个属性来存储它:

public class YourClass 
{ 
    public SpeechState SpeechState { get; set; } 
} 

然后,您可以将该类的此属性设置为一个值。

+0

我不认为它在工作,当我尝试这样做时,无论我如何分配它,它都不起作用。我将如何分配给此? –

+1

@Jase - 它的工作原理。只要看看上面的链接的枚举。 – Hogan

+1

@Jase你需要一个字段或属性在你的类上:'public SpeechState SpeechState {get;组; }' –

4

使用枚举:

public enum SpeechState 
{ 
    Listening, 
    Recording, 
    Dictating, 
    Unresponsive 
} 
+0

我不认为这是工作时,当我尝试这一点,无论我如何分配给它它不会工作。我将如何分配给此? –

+1

你说'SpeechState state = SpeechState.Recording;'枚举是整数数据类型上的语法糖。每个值都是糖的整数值。在上面的例子中,“Listening”是0,“Recording”1,“Dictating”2和“Unresponsive”3。你也可以说'SpeechState state =(SpeechState)123456789;',这是完全合法的。没有要求分配给枚举的值实际上是*有效*的那个特定枚举。 –

+0

@NicholasCarey,这是一个非常*甜美的答案。 – gunr2171