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

时间:2015-07-23 12:49:29

标签: c# .net winforms visual-studio properties

我有 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)。

1 个答案:

答案 0 :(得分:2)

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

当您设计组件本身或表单时,该组件或表单中的代码不会执行。事件处理程序,方法覆盖,没有执行。

但是,如果您在设计器中使用组件,就像在表单中一样,那么该组件中的代码将会执行。

很可能您在Visual Studio中的设计器中运行的组件中有代码。事实上似乎启动应用程序留下了其变化的残余可能更巧合。

例如,实现此目的的典型方法是覆盖组件中的paint方法,而不检查组件是否处于设计模式。每当需要绘制组件时,这包括它在不同形式或控件的设计器中,那么该代码将被执行。

要检查组件是否处于设计模式,您应该这样做:

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

另见this question for more details: Detecting design mode from a Control's constructor