c#组合框只在调试中设置

本文关键字:调试 设置 组合 | 更新日期: 2023-09-27 18:15:53

我一直在用c# (VS Express 2015)编写应用程序,并有一个我想用保存值预填充的组合框。我似乎不能让组合框采取的值,我试图设置它。我创建了一个新项目来演示这个错误。

主代码如下。另一个文件声明了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;
    }

奇怪的部分是,如果我在正常调试模式下运行程序或单步通过它,组合框将始终显示"未设置",但如果我在设置颜色之前中断并在Locals调试窗口中打开colorCombo项,然后通过它,它将被正确设置。如果在调试器中查看问题就可以解决问题,那么弄清楚发生了什么就不那么痛苦了。

我将非常感谢任何意见,谢谢。

c#组合框只在调试中设置

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

请像这样更改绘制函数中的步骤顺序&没问题的。

 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"

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

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

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