C# 应用程序完成后,为什么运行时值显示在设计模式中?

C# 应用程序完成后,为什么运行时值显示在设计模式中?,c#,.net,winforms,visual-studio,properties,C#,.net,Winforms,Visual Studio,Properties,我在设计模式下设置了DataGridViewComboBoxColumn的自定义子体,其项的以下值为属性: ItemA ItemB ItemC 关闭表单并返回设计模式后,可以看到属性值设置为 ItemA CHANGED ItemB CHANGED ItemC CHANGED 项目A已更改 项目B已更改 项目C已更改 我不相信这是可能的,但这就是我得到的。启动5次后,我可以看到每个项目都添加了CHANGED 我只在PaintDataGridViewComboBoxC

我在设计模式下设置了DataGridViewComboBoxColumn的自定义子体,其
项的以下值为
属性:

ItemA ItemB ItemC 关闭表单并返回设计模式后,可以看到属性值设置为

ItemA CHANGED ItemB CHANGED ItemC CHANGED 项目A已更改 项目B已更改 项目C已更改 我不相信这是可能的,但这就是我得到的。启动5次后,我可以看到每个项目都添加了
CHANGED


我只在
Paint
DataGridViewComboBoxCell的后代的事件处理程序中调用的方法中更改了一次项。(没有更好的地方可以钩住它,因为在构造函数中,初始化尚未完成,因此
Items.Count=0
)。

很可能您已经创建了一个新组件并在设计器中使用了它

当您设计组件本身或表单时,该组件或表单中的代码不会执行。事件处理程序、方法重写,这些都不会执行

但是如果您在设计器中使用该组件,比如在表单中,则将执行该组件中的代码

最有可能的是,您在VisualStudio内的设计器中运行的组件中有代码。启动该应用程序似乎会留下一些变化,这一事实可能更像是巧合

例如,实现这一点的典型方法是重写零部件中的绘制方法,而不是检查零部件是否处于设计模式。每当组件需要绘制时,这包括它位于不同窗体或控件的设计器中,那么代码就会执行

要检查零部件是否处于设计模式,应执行以下操作:

bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
另见

bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);