0

我必须将标志枚举映射到多个组合框。

例如,前 2 位需要对应一个组合框,用于屏幕对比度设置:

Bit 0 - 1: Contrast (0=Low / 1 = Medium / 2=high)

位 2 & 3 需要对应语音音量

Bit 2 - 3: Speech volume (0=Low / 1 = Medium / 2 = High)

第 4 位和第 5 位对应于蜂鸣器音量。

Bit 4 – 5: Buzzer volume (0=Low / 1 = Medium / 2 = High)

第 6 位对应于入口或出口(即,如果它在它的入口,如果它关闭它的出口)

Bit 6: Entry/exit indication

我的标志枚举定义为:

[Flags]
public enum RKP
{
    Contrast0 = 1,              // bit 0
    Contrast1 = 2,              // bit 1
    SpeechVolume2 = 4,          // bit 2
    SpeechVolume3 = 8,          // bit 3
    BuzzerVolume4 = 16,         // bit 4
    BuzzerVolume5 = 32,         // bit 5
    EntryExitIndication = 64,   // bit 6
}

将这些映射到适当的组合框,然后将每个组合框的值转换为正确的枚举值以保存它的最佳方法是什么?

4

2 回答 2

2

使用您的解决方案,可以创建相互冲突的值,例如合并MediumSpeechVolumeHighSpeechVolume正如 Dan Puzey 指出的那样。

您的解决方案是否必须被标记enum?这可以使用一个简单的类来解决,其中包含 4 个必需的枚举作为属性。如果您需要当前标志枚举生成的确切位模式,请使用自定义创建另一个要公开的属性,并将get4set个主要属性的当前值转换为所需的位模式并返回。

于 2012-10-02T12:56:11.213 回答
0
[Flags]
public enum RKP
{
    LowContrast = 0,
    MediumContrast = 1,         // bit 0
    HighContrast = 2,           // bit 1

    LowSpeechVolume = 0,
    MediumSpeechVolume = 4,     // bit 2
    HighSpeechVolume = 8,       // bit 3

    LowBuzzerVolume = 0,
    MediumBuzzerVolume = 16,    // bit 4
    HighBuzzerVolume = 32,      // bit 5

    ExitIndication = 0,
    EntryIndication = 64,       // bit 6
}

contrastComboBox.ItemsSource = new[] { RKP.LowContrast, RKP.MediumContrast, RKP.HighContrast };
contrastComboBox.SelectedItem = currentValue & (RKP.MediumContrast | RKP.HighContrast);
//and so on for each combo box...

//and when you want the result:
RKP combinedFlag = (RKP)contrastComboBox.SelectedItem | //other combo box items

您可能想要对将显示的字符串做一些事情,但这是基本思想。

于 2012-10-02T11:57:22.517 回答