我有 DataGridViewComboBoxColumn 的自定义后代,在设计模式中设置了以下Items
属性值:
ItemA ItemB ItemC
在运行时期间,我正在更改此Items
属性,如下所示(示例):
for (int i = 0; i < Items.Count; i++) {
Items(i) = Convert.ToString(Items(i)) + " CHANGED";
}
关闭表单并返回设计模式后,我可以看到属性值设置为
ItemA CHANGED ItemB CHANGED ItemC CHANGED
我不相信这是可能的,但这就是我所得到的。 5次发布后,我可以看到每个项目后缀为CHANGED CHANGED CHANGED CHANGED CHANGED
。
我只能在 DataGridViewComboBoxCell 的后代的Paint
事件处理程序调用的方法中更改项目一次。 (没有更好的地方来挂钩它,因为在构造函数中,初始化还没有完成,所以Items.Count = 0
)。
答案 0 :(得分:2)
很可能您已经创建了一个新组件并在设计器中使用它。
当您设计组件本身或表单时,该组件或表单中的代码不会执行。事件处理程序,方法覆盖,没有执行。
但是,如果您在设计器中使用组件,就像在表单中一样,那么该组件中的代码将会执行。
很可能您在Visual Studio中的设计器中运行的组件中有代码。事实上似乎启动应用程序留下了其变化的残余可能更巧合。
例如,实现此目的的典型方法是覆盖组件中的paint方法,而不检查组件是否处于设计模式。每当需要绘制组件时,这包括它在不同形式或控件的设计器中,那么该代码将被执行。
要检查组件是否处于设计模式,您应该这样做:
bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
另见this question for more details: Detecting design mode from a Control's constructor。