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项,然后通过它,它将被正确设置。如果在调试器中查看问题就可以解决问题,那么弄清楚发生了什么就不那么痛苦了。
我将非常感谢任何意见,谢谢。我不知道为什么会发生这种情况,但我可以告诉你如何修复它-
请像这样更改绘制函数中的步骤顺序&没问题的。
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));