0

Flags Enumeration を複数のコンボ ボックスにマップする必要があります。

たとえば、最初の 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

あなたのソリューションでは、たとえばMediumSpeechVolumeHighSpeechVolumeDan Puzey が指摘したように、競合する値を作成することができます。

あなたのソリューションはフラグが立てられている必要がありますenumか? これは、必要な 4 つの列挙型をプロパティとして内部に持つ単純なクラスを使用して解決できます。現在のフラグ列挙型によって生成された正確なビット パターンが必要な場合は、公開する別のプロパティをカスタムで作成しgetset4 つの主要なプロパティの現在の値を必要なビット パターンに変換して元に戻します。

于 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 に答える