首页 > 解决方案 > 无法在与枚举绑定的组合框中设置“SelectedValue”

问题描述

我想通过 SelectedItem/SelectedText/SelectedValue(从任何一种方式)在组合框中设置默认值(而不是第一个)。

我试图通过许多不同的方式来解决它。就像我将枚举设置为键值对一样。试图使用“SelectedIndex”。调试时显示“-1”。在其他“selected*”选项中,值为“null”。我不知道发生了什么。我附上了代码。请看一下并帮助我解决它。谢谢你。

            ComboBox cmbxType= new ComboBox();
            cmbxType.FormattingEnabled = true;
            cmbxType.DropDownStyle = ComboBoxStyle.DropDownList;
            cmbxType.Margin = new Padding(3, 6, 3, 3);
            cmbxType.Name = "cmbxType";
            cmbxType.Size = new System.Drawing.Size(200, 28);
            cmbxType.TabIndex = 1;
            cmbxType.DataSource = Enum.GetValues(typeof(StateType));
            cmbxType.SelectedIndexChanged += new System.EventHandler(cmbxType_SelectedIndexChanged);
            cmbxType.ValueMember = (workflowRows).ToString();
            cmbxType.SelectedValue = 2

PS:我在创建表单后创建了这个组合框,而有问题的情况仅与枚举有关。

标签: c#asp.netwindowswinformscombobox

解决方案


根据this Stack Overflow question,您只能在分配数据绑定后设置所选项目。OnLoad如果您在事件发生时选择该项目,它应该可以工作。下面是一个工作示例。

using System;
using System.Windows.Forms;

namespace WindowsFormsApp
{
    static class Program
    {
        internal enum StateType
        {
            State1, 
            State2, 
            State3
        }

        internal class DemoForm : Form
        {
            ComboBox cmbxType = new ComboBox();

            public DemoForm()
            {
                cmbxType.DataSource = Enum.GetValues(typeof(StateType));
                Controls.Add(cmbxType);
            }

            protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);
                cmbxType.SelectedItem = StateType.State3;
            }
        }

        [STAThread]
        static void Main()
        {
            Application.Run(new DemoForm());
        }
    }
}

推荐阅读