应用程序完成后,为什么运行时值出现在设计模式中
本文关键字:设计模式 运行时 为什么 应用程序 | 更新日期: 2023-09-27 18:04:29
我有自定义后代DataGridViewComboBoxColumn与Items
属性设置在设计模式下的以下值:
在运行时,我像这样改变这个Items
属性(示例):
for (int i = 0; i < Items.Count; i++) {
Items(i) = Convert.ToString(Items(i)) + " CHANGED";
}
在我关闭表单并返回到设计模式后,我可以看到属性值设置为
<>之前ItemA改变ItemB改变ItemC改变之前我不相信这是可能的,但这就是我得到的。5次启动后,我可以看到每个项目都以CHANGED CHANGED CHANGED CHANGED CHANGED
为后缀。
我改变项目只有一次,在方法从Paint
事件处理程序调用DataGridViewComboBoxCell的后代。(没有更好的地方挂钩它,因为在构造函数中,初始化尚未完成,所以Items.Count = 0
)。
很可能您已经创建了一个新组件并在设计器中使用了它。
当您设计组件本身或表单时,该组件或表单中的代码不会执行。事件处理程序,方法重写,这些都不执行。
然而,如果您在设计器中使用组件,例如在表单中,则该组件中的代码将执行。
很可能在Visual Studio内的设计器中运行的组件中有代码。事实上,这款应用的启动似乎留下了其变化的残余,这更可能是一个巧合。
例如,实现这种情况的典型方法是重写组件中的paint方法,而不检查组件是否处于设计模式。当组件需要绘制时,包括它位于不同的窗体或控件的设计器中,则该代码将执行。检查组件是否处于设计模式,你应该这样做:
bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);