C# 应用程序完成后,为什么运行时值显示在设计模式中?
我在设计模式下设置了DataGridViewComboBoxColumn的自定义子体,其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
项的以下值为属性:
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);