我正在使用自定义枚举值填充组合框:
private enum AlignOptions
{
Left,
Center,
Right
}
. . .
comboBoxAlign1.DataSource = Enum.GetNames(typeof(AlignOptions));
当我尝试将所选项目分配给该枚举类型的var时,但是:
AlignOptions alignOption;
. . .
alignOption = (AlignOptions)comboBoxAlign1.SelectedItem;
...它爆炸了:“ System.InvalidCastException未处理 消息=指定的强制转换无效。“
项目不是AlignOptions类型吗?
alignOptionStr = comboBoxAlign1.SelectedItem.ToString();
if (alignOptionStr.Equals(AlignOptions.Center.ToString()))
{
lblBarcode.TextAlign = ContentAlignment.MiddleCenter;
}
else if (alignOptionStr.Equals(AlignOptions.Left.ToString()))
{
. . .
答案 0 :(得分:8)
它是一个无效的强制转换,因为你没有枚举,你有枚举的字符串名称表示。要重新获得该枚举,您需要解析它。
alignOption = (AlignOptions)Enum.Parse(typeof(AlignOptions), (string)comboBoxAlign1.SelectedItem);
答案 1 :(得分:3)
您应该使用Enum.GetValues Method来初始化您的组合框:
comboBoxAlign1.DataSource = Enum.GetValues(typeof(AlignOptions));
现在,组合框包含枚举元素和
AlignOptions alignOption = (AlignOptions)comboBoxAlign1.SelectedItem;
是正确的演员。
答案 2 :(得分:1)
Enum.GetNames()
会返回string[]
,因此每个项目都是string
,而不是AlignOptions
。
您可以通过以下方式获取枚举值:
alignOption = (AlignOptions) Enum.Parse(typeof(AlignOption),
(string) comboBoxAlign1.SelectedItem);
<强>参考文献:强>