Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在组合框中将枚举选择为SelectedItem_C#_.net_Winforms - Fatal编程技术网

C# 在组合框中将枚举选择为SelectedItem

C# 在组合框中将枚举选择为SelectedItem,c#,.net,winforms,C#,.net,Winforms,在winforms组合框中,我很难选择合适的项。之前我已经详细描述了,但我认为这个问题仍然没有解决,因为我使用一个表单来添加/编辑记录。所以在表格上我有 private void AddEditForm_Load(object sender, EventArgs e) { PopulateComboBoxLanguage(); } private void PopulateComboBoxLanguage() { comboBoxLang.DataSource

在winforms组合框中,我很难选择合适的项。之前我已经详细描述了,但我认为这个问题仍然没有解决,因为我使用一个表单来添加/编辑记录。所以在表格上我有

  private void AddEditForm_Load(object sender, EventArgs e)
  {
      PopulateComboBoxLanguage();
  }

private void PopulateComboBoxLanguage()
{
    comboBoxLang.DataSource = Enum.GetValues(typeof(Book.EnumLang));
}
在编辑操作中,我想用现有数据填充表单,所有内容都会按应有的方式填充,除了始终显示EnumLang中第一项的combobox。 从我的第二个构造函数中,我调用
PopulateWithExisingData(book)

comboBoxLang.SelectedItem = book.Language;
但即使在传递
book.Language
时设置为德语
SelectedItem
在调试模式下也始终为空


p、 我用
comboBoxLang.SelectedItem=(book.EnumLang)book.Language进行了尝试也与SelectedValue相同,但保持不变

再一次,我想问题是在页面加载时填充组合框,但我不知道是什么问题以及如何解决


请询问更多信息。

设置数据源时,会传递一个对象数组。
设置SelectedItem时,会传递一个枚举值,因此它会再次装箱到对象。ComboBox使用方法IndexOf在数据源值中搜索您的项,该方法使用方法Object.Equals将这些值与新值进行比较。由于它们是不同的对象(引用不同),因此在数据源集合中找不到您的项,因此选择不会更改。

设置数据源时,会传递一个对象数组。
设置SelectedItem时,会传递一个枚举值,因此它会再次装箱到对象。ComboBox使用方法IndexOf在数据源值中搜索您的项,该方法使用方法Object.Equals将这些值与新值进行比较。由于它们是不同的对象(引用不同),因此在数据源集合中找不到您的项,因此选择不会更改。

设置数据源时,会传递一个对象数组。
设置SelectedItem时,会传递一个枚举值,因此它会再次装箱到对象。ComboBox使用方法IndexOf在数据源值中搜索您的项,该方法使用方法Object.Equals将这些值与新值进行比较。由于它们是不同的对象(引用不同),因此在数据源集合中找不到您的项,因此选择不会更改。

设置数据源时,会传递一个对象数组。 设置SelectedItem时,会传递一个枚举值,因此它会再次装箱到对象。ComboBox使用方法IndexOf在数据源值中搜索您的项,该方法使用方法Object.Equals将这些值与新值进行比较。由于它们是不同的对象(引用不同),因此在数据源集合中找不到您的项,因此选择不会更改

  • 声明要在表单中添加/编辑的对象类型的实例
  • 向表单中添加bool isEdit并将其设置为false
  • 添加方法public void Initialize(ObjectType name)
  • Initialize方法应将表单实例设置为该参数,并应设置布尔标志isEdit=true
  • 将加载数据/填充控件(如组合框)的所有代码放入表单加载事件中
  • 在加载事件的底部,在填充控件后执行以下操作:

        if (isEdit)
        {
            //Set your controls selected values from the object you are editing
        }
    
  • 现在,对于新对象,只需制作表单并在其上调用Show或ShowDialog即可。这将导致Load事件触发,并填充控件

    要进行编辑,请创建表单,调用Initialize,然后执行Show/ShowDialog。由于Initialize方法将isEdit设置为true,加载事件底部的if(isEdit)代码块将被命中,控件值将被设置为与正在编辑的对象的属性相等

    下面是一些非常简单的示例代码:

        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            //This is simulating an add...First Language will be displayed on form2, 
            //which is English
            Form2 form = new Form2();
            form.ShowDialog();
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
            //This is simulating an edit...this will display french 
            //(or whatever is passed in)
            Form2 form = new Form2();
            form.Initialize(Languages.French);
            form.ShowDialog();
        }
    


  • 声明要在表单中添加/编辑的对象类型的实例
  • 向表单中添加bool isEdit并将其设置为false
  • 添加方法public void Initialize(ObjectType name)
  • Initialize方法应将表单实例设置为该参数,并应设置布尔标志isEdit=true
  • 将加载数据/填充控件(如组合框)的所有代码放入表单加载事件中
  • 在加载事件的底部,在填充控件后执行以下操作:

        if (isEdit)
        {
            //Set your controls selected values from the object you are editing
        }
    
  • 现在,对于新对象,只需制作表单并在其上调用Show或ShowDialog即可。这将导致Load事件触发,并填充控件

    要进行编辑,请创建表单,调用Initialize,然后执行Show/ShowDialog。由于Initialize方法将isEdit设置为true,加载事件底部的if(isEdit)代码块将被命中,控件值将被设置为与正在编辑的对象的属性相等

    下面是一些非常简单的示例代码:

        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            //This is simulating an add...First Language will be displayed on form2, 
            //which is English
            Form2 form = new Form2();
            form.ShowDialog();
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
            //This is simulating an edit...this will display french 
            //(or whatever is passed in)
            Form2 form = new Form2();
            form.Initialize(Languages.French);
            form.ShowDialog();
        }
    


  • 声明要在表单中添加/编辑的对象类型的实例
  • 向表单中添加bool isEdit并将其设置为false
  • 添加方法public void Initialize(ObjectType name)
  • Initialize方法应将表单实例设置为该参数,并应设置布尔标志isEdit=true
  • 将加载数据/填充控件(如组合框)的所有代码放入表单加载事件中
  • 在加载事件的底部,在填充控件后执行以下操作:

        if (isEdit)
        {
            //Set your controls selected values from the object you are editing
        }
    
  • 现在,对于新对象,只需制作表单并在其上调用Show或ShowDialog即可。这将导致Load事件触发,并填充控件

    要进行编辑,请创建表单,调用Initialize,然后执行Show/ShowDialog。由于Initialize方法将isEdit设置为true,加载事件底部的if(isEdit)代码块将被命中,控件值将被设置为与正在编辑的对象的属性相等

    下面是一些非常简单的示例代码:

        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            //This is simulating an add...First Language will be displayed on form2, 
            //which is English
            Form2 form = new Form2();
            form.ShowDialog();
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
            //This is simulating an edit...this will display french 
            //(or whatever is passed in)
            Form2 form = new Form2();
            form.Initialize(Languages.French);
            form.ShowDialog();
        }
    


  • 声明要添加/编辑的对象类型的实例