设置枚举ComboBox的起始值

时间:2016-04-26 17:51:17

标签: c# winforms combobox

一直在寻找这个问题的解决方案,找到了很多解决方案,但没有改变我的代码行为。这是在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的起始值?

2 个答案:

答案 0 :(得分:1)

该代码有几处错误。

首先,enum没有NameValue属性(实际上它没有任何属性),因此DisplayMemberValueMember不能使用,应保留为空(默认)。这反过来意味着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