自定义控件属性作为枚举

本文关键字:枚举 属性 自定义控件 | 更新日期: 2023-09-27 18:08:10

我有一个自定义控件,它是文本框和按钮的组合(搜索控件)。它定义的一个属性用于标识它的位置(无论是在Master页面还是Content页面中,以便我们进行搜索设置),即PageName。最初,它被声明为字符串属性:

public string PageName
{
    set;
    get;
}

但是因为我们有一些区分大小写的问题。我们将其更改为enum,这样用户就不会输入任何随机的东西,从而避免出现异常。现在改成:

public enum PageNameProperty { MasterPage , SearchResultsPage, MLIPage };
public PageNameProperty PageName
{
   set;
   get;
}

但是现在我们得到的错误是:

方法未找到:'无效UI.SearchTextBox.set_PageName(System.String)'。
内部异常(Level 1)

注意:现在我不能强制用户将其更改为PageName。Master或其他任何东西,因为他们不能修改当前版本的代码,而只能安装我们的控件,所以项目会引用新的dll。

除了在当前版本之前将属性类型复制回字符串之外,我需要一些解决方案。

请帮。

自定义控件属性作为枚举

您更改了属性的签名(例如返回类型)。调用代码将失败,因为他们找不到他们期望的签名。

您应该保留原来的属性,将其标记为过时,并创建一个新的属性,如下所示:

[Obsolete("User PageName2")
public string PageName {
{
 get { return PageName2.ToString(); }
set { PageName2 = (PageNameProperty )Enum.Parse(typeof(PageNameProperty), value);
}
public PageNameProperty PageName2 { set; get; }

这将保持与以前使用的兼容性,同时鼓励使用新的

你能这样做吗?:

public enum PageNameProperty { MasterPage , SearchResultsPage, MLIPage };  
private PageNameProperty pageName;
public PageNameProperty PageName 
{ 
   get
   {
       return pageName ?? PageNameProperty.MLIPage;
   }
   set
   {
       pageName = value;
   }
} 

您可以简单地验证这些值,以确保它们使用有效的字符串

private string _pageName = null;
public string PageName
{
    set 
    { 
        if (value == null)
           throw new NullReferenceException();
        if (!(new string[] { "master", "content" }.Contains(value.ToLower()))
           throw new InvalidOperationException();
        _pageName = value; 
    }
    get
    {
       return _pageName;
    }
}

在设计时,这会给客户端一个错误,指出他们输入了一个无效的值。