2012-09-04 101 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

「自定義屬性聲明」解決!謝謝。 –