2012-09-04 52 views
4

我为我的properygrid定义了一个属性,它的值是创建者的集合。我定义了CreatorsEditor类。在这个类中,我使用HumanRolesCode变量。我怎样才能访问这个变量属性的属性设置值。我想要改变HumanRolesCode的值。例如:[编辑器(typeof运算(CreatorsEditor(HumanRolesCode = 10))]如何在c#中访问属性属性中的类变量?

我的代码是:

[Editor(typeof(CreatorsEditor), typeof(UITypeEditor))] 
public string Creators { get; set; } 
//------------------------------------- 

public class CreatorsEditor : UITypeEditor 
{ 
    public static int HumanRolesCode; 

    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) 
    { 
     return UITypeEditorEditStyle.Modal; 
    } 

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) 
    { 
     IWindowsFormsEditorService svc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); 
     if (svc != null) 
     { 
      CreatorFrm.HumanRoleCode = HumanRolesCode; 
      CreatorFrm Frm = new CreatorFrm(); 
      if (svc.ShowDialog(Frm) == System.Windows.Forms.DialogResult.OK) 
      { 
       string HumanNames = ""; 
       for (int i = 0; i < Frm.DgvCreator.Rows.Count; i++) 
        if (Boolean.Parse(Frm.DgvCreator[0, i].Value.ToString()) == true) 
         HumanNames += Frm.DgvCreator[2, i].Value.ToString() + " , "; 
       if (!string.IsNullOrEmpty(HumanNames)) 
        HumanNames = HumanNames.Substring(0, HumanNames.Length - 3); 
       return HumanNames; 
      } 
     } 
     return value; 
    } 
} 

回答

2

的属性参数必须是一个常量表达式的typeof运算表达式或数组创建表达式属性参数类型。

这似乎是不可能的分配某个值,并且通常使一些运行时代码(方法\属性)由自定义属性的声明来执行。

自定义属性只是将附加信息与目标相关联的一种方式,编译器只是将其他信息添加到元数据中......虽然您希望在编译时更改仅在运行时存在的变量。

此外,自定义属性的实例不会创建,直到您使用反射来检索它(再次 - 在运行时,而声明在编译时)。

在Jeffrey Richter的书“CLR via C#”中有关于自定义属性的章节。我建议您阅读它以了解自定义属性的行为方式,可以使用它们以及如何使用它们。

+0

“自定义属性声明”解决!谢谢。 –