在用户控件中公开控件

时间:2011-03-25 09:43:38

标签: c# .net winforms user-controls

冒着被嘲笑的风险并因违反一些设计规则而飙升,我有以下问题。

我们创建了一些Usercontrols,我们使用Properties公开了这些用户控件的控件。然后,我们在设计器中更改这些问题以进一步调整用户控件(针对特定表单),如果我们保存任何内容都不是由设计者编写的,并且确实没有保存更改。

当我们将更改硬编码到设计器文件中时,更改会被保存,如果我们通过设计器手动更改属性并保存以前的所有更改,则会重新进行更改。

我们是否违反了某些模式/设计规则?这是一个错误,有更好的方法吗?

问候,

F.B。十凯特

2 个答案:

答案 0 :(得分:3)

显然可以使用几个属性执行此操作,在您添加DesignerSerializationVisibilityAttribute:http://msdn.microsoft.com/en-us/library/system.componentmodel.designerserializationvisibilityattribute.aspx的Control属性中,您将其设置为内容:http://msdn.microsoft.com/en-us/library/system.componentmodel.designerserializationvisibility.aspx

我同意Rob的观点,虽然拥有一个代表这个属性的属性是一个更好的做法,但这是怎么回答我的问题,我到底该怎么做:)

答案 1 :(得分:2)

如果您在父用户控件上创建了一个属性,然后只是委托给子用户控件的属性,那么您应该看到设计师能够赶上你。

public class CustomerEditor
{
    public DateTime? Birthday
    {
        get
        {
            return birthdayPicker.Date;

这有额外的好处,你可以(稍微)保护你的客户端代码(设计器生成的东西)免受父用户控件的特定实现细节的影响。例如,如果您将某个父usercontrol的子控件从datepicker更改为文本框,则只需更改已添加到父usercontrol的属性,您就不必更新10-20使用此用户控件的表单。

public class CustomerEditor
{
    public DateTime? Birthday
    {
        get
        {
            //probably tryparse but you get the idea
            return DateTime.Parse(birthdayPickerTextBox.Text);