我有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).
最佳答案 您很可能已经创建了一个新组件并在设计器中使用它.
在设计组件本身或表单时,该组件或表单中的代码不会执行.事件处理程序,方法覆盖,没有执行.
但是,如果在设计器中使用组件(如表单中),则该组件中的代码将执行.
很可能您在Visual Studio中的设计器中运行的组件中有代码.事实上似乎启动应用程序留下了其变化的残余可能更巧合.
例如,实现此目的的典型方法是覆盖组件中的paint方法,而不检查组件是否处于设计模式.每当需要绘制组件时,这包括它在不同形式或控件的设计器中,那么该代码将被执行.
要检查组件是否处于设计模式,您应该这样做:
bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
另见this question for more details: Detecting design mode from a Control’s constructor.