应用程序完成后,为什么运行时值出现在设计模式中

本文关键字:设计模式 运行时 为什么 应用程序 | 更新日期: 2023-09-27 18:04:29

我有自定义后代DataGridViewComboBoxColumnItems属性设置在设计模式下的以下值:

<>之前ItemAItemBItemC之前

在运行时,我像这样改变这个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);

从控件的构造函数中检测设计模式
相关文章: