4

コンボボックスにカスタム列挙値を入力しています:

    private enum AlignOptions
    {
        Left,
        Center,
        Right
    }

. . .

    comboBoxAlign1.DataSource = Enum.GetNames(typeof(AlignOptions));

ただし、選択したアイテムをその列挙型の変数に割り当てようとすると、次のようになります。

    AlignOptions alignOption;
. . .
    alignOption = (AlignOptions)comboBoxAlign1.SelectedItem;

...次のように爆発します:「System.InvalidCastExceptionは未処理でしたMessage=指定されたキャストは無効です。

アイテムはAlignOptionsタイプではありませんか?

アップデート

ダン、私は賢いと思った。Ginosajiは正しいです、そして私はそれを次のように変更しなければなりませんでした:

    alignOptionStr = comboBoxAlign1.SelectedItem.ToString();
    if (alignOptionStr.Equals(AlignOptions.Center.ToString()))
    {
        lblBarcode.TextAlign = ContentAlignment.MiddleCenter;
    }
    else if (alignOptionStr.Equals(AlignOptions.Left.ToString()))
    {
        . . .
4

3 に答える 3

8

列挙型がなく、列挙型の文字列名表現があるため、これは無効なキャストです。その列挙型を取り戻すには、それを解析する必要があります。

alignOption = (AlignOptions)Enum.Parse(typeof(AlignOptions), (string)comboBoxAlign1.SelectedItem);
于 2013-02-15T00:27:04.253 に答える
3

代わりに、 Enum.GetValuesメソッドを使用してコンボボックスを初期化する必要があります。

comboBoxAlign1.DataSource = Enum.GetValues(typeof(AlignOptions));

これで、コンボボックスには列挙型と

AlignOptions alignOption = (AlignOptions)comboBoxAlign1.SelectedItem;

正しいキャストです。

于 2013-02-15T00:39:09.297 に答える
1

Enum.GetNames()を返すstring[]ので、各アイテムはでstringはなく、AlignOptionsです。

次の方法で列挙値を取得できます。

    alignOption = (AlignOptions) Enum.Parse(typeof(AlignOption), 
                                              (string) comboBoxAlign1.SelectedItem);

参照:

于 2013-02-15T00:27:17.060 に答える