Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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#组合框仅在调试中设置_C#_Debugging_Combobox - Fatal编程技术网

C#组合框仅在调试中设置

C#组合框仅在调试中设置,c#,debugging,combobox,C#,Debugging,Combobox,我一直在用C#(VS Express 2015)编写一个应用程序,并且有一个组合框,我想用保存的值预先填充。我似乎无法让combobox接受我试图设置的值。我创建了一个新项目来演示这个错误 主要代码如下。另一个文件声明tableLayoutPanel。drawComboBox函数应使用给定的选定选项和行向面板添加一个组合框 public Form1() { InitializeComponent(); drawComboBox(Options.Bl

我一直在用C#(VS Express 2015)编写一个应用程序,并且有一个组合框,我想用保存的值预先填充。我似乎无法让combobox接受我试图设置的值。我创建了一个新项目来演示这个错误

主要代码如下。另一个文件声明tableLayoutPanel。drawComboBox函数应使用给定的选定选项和行向面板添加一个组合框

    public Form1()
    {
        InitializeComponent();
        drawComboBox(Options.Blue, 0);
    }

    public enum Options
    {
        Unset,
        Blue,
        Yellow,
        Red
    };

    private void drawComboBox(Options SelectedOption, int row)
    {
        System.Windows.Forms.ComboBox colorCombo = new System.Windows.Forms.ComboBox();
        colorCombo.DataSource = Enum.GetValues(typeof(Options));
        colorCombo.Name = "colorCombo";
        this.tableLayoutPanel1.Controls.Add(colorCombo, 0, row);
        colorCombo.SelectedItem = Options.Yellow;
    }
奇怪的是,如果我在正常调试模式下运行程序或单步执行,组合框将始终显示“Unset”,但如果我在设置颜色之前中断,并在本地调试窗口中打开colorCombo项,然后单步执行,则会正确设置。考虑到在调试器中查看问题可以解决问题,因此弄清楚发生了什么不仅仅是一件痛苦的事情


如果您有任何想法,我将不胜感激,谢谢

我不知道为什么会发生这种情况,但我可以告诉你如何修复它-

请像这样更改绘图函数中的步骤顺序&它可以正常工作

 private void drawComboBox(Options SelectedOption, int row)
    {
        System.Windows.Forms.ComboBox colorCombo = new System.Windows.Forms.ComboBox();
        colorCombo.Name = "colorCombo";
        this.tableLayoutPanel1.Controls.Add(colorCombo, 0, row);

        colorCombo.DataSource = Enum.GetValues(typeof(Options));
        colorCombo.SelectedItem = Options.Yellow;


    } 
它似乎取决于这两行代码的顺序

这种组合会产生“unset”

如果你把它倒过来,它就会起作用

  this.tableLayoutPanel1.Controls.Add(colorCombo, 0, row);
        colorCombo.DataSource = Enum.GetValues(typeof(Options)); 

与.NET中的许多事情一样,数据绑定也是惰性地完成的。当必须这样做的时候。延迟到实际创建基础本机组合框为止。通过查看调试器中的Items属性,确实可以强制执行该操作。或者通过添加
var dummy=colorCombo.Handle在分配之前。明智的做法是在加载事件中。
  this.tableLayoutPanel1.Controls.Add(colorCombo, 0, row);
        colorCombo.DataSource = Enum.GetValues(typeof(Options));