Visual Studio 2008表单设计器会混淆布尔属性值

时间:2011-02-20 20:14:42

标签: c# visual-studio-2008 windows-forms-designer

我有一个非常烦人的问题,我试图解决几个星期。我有一个WinForms C#项目,我开发了自定义控件(ListView + ToolStrip with ToolStripButtons)。此控件在解决方案中以不同形式使用 - 但在其他项目中使用。对于不同的表单,我需要使某些按钮可见或隐藏,所以我已经添加了相应的属性,如

    public Boolean DeleteButtonVisible
    {
        get
        {
            return tsbDelete.Visible;
        }
        set
        {
            tsbDelete.Visible = value;
        }
    }

默认情况下,某些按钮可见,有些按钮是隐藏的。在设计师使用我的控件编辑表单时,我能够更改这些属性,控件上的按钮变得可见或隐藏。但每当我在所有表单中的控制源文件中更改任何时,无论我在设计器中设置了什么,我都必须将这些属性重置为默认值这些值是手动的。好吧,我正在使用源代码控制,所以这并不难,但每次我在另一个文件中更改一点时,对几十个文件执行“撤消”是一个该死的灾难。

我尝试使用[DesignerSerializationVisibility]属性来解决此问题。如果我使用它的值“隐藏”它根本没有任何好处 - 价值只是没有保存。 “内容”使按钮随机消失,即使默认情况下它们是可见的。 “可见”导致无效,因为这是默认值...

我不想为我的代码中的每个表单设置每个按钮的可见性 - 这不是它应该完成的方式。

有人对此有所了解吗?

1 个答案:

答案 0 :(得分:2)

是的,Control.Visible属性很特殊。 getter not 返回最后指定的值,只有在控件实际可见时才返回true。这可能有副作用,你找到了一个。在这种情况下,可能在控制器切换到设计模式时引发。要正确执行此操作,必须将指定的状态存储在支持变量中。像这样:

    private bool tsbDeleteVisible;

    public bool DeleteButtonVisible {
        get { return tsbDeleteVisible; }
        set { tsbDelete.Visible = tsbDeleteVisible = value; }
    }

确保将支持变量的默认值初始化为默认值tsbDelete.Visible。使用构造函数来确定。