一直在寻找这个问题的解决方案,找到了很多解决方案,但没有改变我的代码行为。这是在WinForms中。
我正在加载一个带有ComboBox的表单,该表单包含此枚举的值和名称,位于名为" Node"的类中。
class Node
{
public enum NodeType { Yield, Home, Parking, Light, None, Inbound, Outbound }
public NodeType Type;
}
然后在我的表单中,我有一个名为" Type"的ComboBox,它是这样设置的(来自构造函数):
Node node = new Node();
node.Type = Node.NodeType.Home;
Type = new ComboBox();
Type.Location = new Point(77, 41);
Type.Size = new Size(121, 24);
Type.DropDownStyle = ComboBoxStyle.DropDownList;
Type.DisplayMember = "Name";
Type.ValueMember = "Value";
Type.DataSource = Enum.GetValues(typeof(Node.NodeType));
Type.SelectedValue = node.Type;
Controls.Add(Type);
程序运行时,列表显示所有名称,关闭表单后,我可以通过检索所选值。 Type.SelectedValue。 我的问题是ComboBox没有从Node已经设置的值开始。基本上就是这一行
Type.SelectedValue = node.Type;
没有做任何事情。我尝试过使用没有改变任何内容的SelectedItem,
Type.SelectedIndex = (int)node.Type;
导致了ArgumentOutOfRangeException。
所以,我的问题是:如何设置ComboBox的起始值?
答案 0 :(得分:1)
该代码有几处错误。
首先,enum
没有Name
和Value
属性(实际上它没有任何属性),因此DisplayMember
和ValueMember
不能使用,应保留为空(默认)。这反过来意味着SelectedValue
无法使用,您需要使用SelectedItem
。
其次,您通过设置ComboBox
属性而不是填充DataSource
,对Items
的列表部分使用列表数据绑定模式,这很好,但数据绑定发生在流程的后期,因此在构造函数中Items
属性为空,SelectedItem
无效。为了解决这个问题,您需要将数据初始化部分移动到表单Load
事件。
因此,在您的表单构造函数中,您将拥有:
Type = new ComboBox();
Type.Location = new Point(77, 41);
Type.Size = new Size(121, 24);
Type.DropDownStyle = ComboBoxStyle.DropDownList;
Controls.Add(Type);
并以您的格式Load
事件 - 这个:
Node node = new Node();
node.Type = Node.NodeType.Home;
Type.DataSource = Enum.GetValues(typeof(Node.NodeType));
Type.SelectedItem = node.Type;
答案 1 :(得分:0)
Type.SelectedIndex =来自你的枚举的索引,例如enum是{" apple"," pear"," pineapple"},你想要梨由deafult,所以Type.SelectedIndex = 1