【发布时间】:2011-02-20 20:14:41
【问题描述】:
我有一个非常烦人的问题,我试图解决几个星期。我有一个 WinForms C# 项目,我在其中开发了我的自定义控件(ListView + ToolStrip 和 ToolStripButtons)。此控件在解决方案中以不同的形式使用 - 但在其他项目中。对于不同的表单,我需要使某些按钮可见或隐藏,因此我在控件中添加了相应的属性,例如
public Boolean DeleteButtonVisible
{
get
{
return tsbDelete.Visible;
}
set
{
tsbDelete.Visible = value;
}
}
有些按钮默认是可见的,有些是隐藏的。在设计器中,当使用我的控件编辑表单时,我可以更改这些属性,控件上的按钮会按应有的方式变为可见或隐藏。但是每次我在 all 表单中的控制源文件中更改 anything 时,无论我在设计器中设置了什么,这些属性都会重置为默认值,我必须恢复手动设置这些值。好吧,我正在使用源代码控制,所以这并不难,但是每次我在另一个文件中更改一点时对几十个文件执行“撤消”是一场该死的灾难。
我已尝试使用 [DesignerSerializationVisibility] 属性来解决此问题。如果我将它与值“隐藏”一起使用,它根本没有任何好处 - 只是没有保存值。 “内容”使按钮随机消失,即使默认情况下它们是可见的。 “可见”没有效果,因为这是默认值...
我不想在我的代码中为每个表单设置每个按钮的可见性 - 这不是应该的方式。
有人知道吗?
【问题讨论】:
-
您是否使用
DefaultValue属性指定了属性的默认值?还是您在构造函数中设置这些值?设计器将始终遵循此属性提供的默认值。 -
我已经尝试过以这种方式指定默认值并且它有效。问题是我可以在控制代码中执行此操作,而在使用它的表单中我经常需要在表单的设计器中设置非默认值 - 当更改控制代码中的单个字节时,这些值会丢失。
-
据我了解,如果您的属性具有使用此属性指定的默认值,只要您没有明确设置它,它将被呈现为具有此值。如果设计人员必须刷新这些值,任何未明确设置的内容都将回退到默认值。如果没有该属性,它可能不是您想要的默认值。您应该在构造函数中设置默认值,并使用属性设置相同的值。
-
@Jeff:我明白这一点,我已经尝试过你的建议 - 这实际上是我要解决的问题)这些值在控件构造函数中设置,在 DefaultValue 属性中设置,然后使用我的控件在表单中用非默认值覆盖。我希望这些值保持非默认并显式设置,但设计人员在我编辑控件代码时强制清除任何覆盖。
标签: c# visual-studio-2008 windows-forms-designer