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