2009-03-05 20 views
1

プロパティグリッドに同じタイプの2つのフィールドがあります。ただし、一方は読み取り専用で、もう一方は編集可能です。読み取り専用のカスタムUITypeEditorのエリプシスを削除するにはどうすればよいですか?

これらのフィールドはどちらもカス​​タムタイプであり、フィールドにelipsis([...])ボタンを配置するカスタムUITypeEditorを持っています。この例では

[ 
    CategoryAttribute("5 - Wind"), 
    DisplayName("Factored Area"), 
    Description("The factored area for the segment."), 
    EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)), 
    TypeConverter(typeof(umConversionTypeConverter)), 
    ReadOnly(true) 
] 
public FactoredAreaClass FactoredArea { ... } 

[ 
    CategoryAttribute("5 - Wind"), 
    DisplayName("Factored Area Modifier"), 
    Description("The factored area modifier."), 
    EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)), 
    TypeConverter(typeof(umConversionTypeConverter)) 
] 
public FactoredAreaClass FactoredAreaMod { ... } 

、FactoredAreaModを編集することが可能ですが、両方のユーザーと大きな混乱を引き起こします省略記号を、持っています。それをオフにするどんな方法?

答えて

1

ReadOnly属性を使用します。これは、ランタイムでの使用のために読み取り/書き込みを維持しながら、デザイン時の読み取り専用としてマークします。

また、プロパティではなくタイプにEditor属性を適用する必要があります。あなたはそのプロパティを編集可能にしたくない場合、それをプロパティに適用することはできません。

+0

この例では、ReadOnly属性を使用したことに注意してください。 これは、実行時にプロパティグリッド内で使用するためのものです。だから、私は運が忘れていますか? – Jerry

+0

私は今それを見ることができます。しかし、EditorAttribute宣言が優先されていると思われます。その属性は、FactoredAreaModタイプに適用するか、実際に編集する必要があるプロパティーにのみ適用してください。 –

1

Jeff Yatesのおかげで、私は別の解決策を考案しました。ここで私はそれをどのように解決したのですか?

最大の問題は、EditorAttributeが実際にFactoredAreaClassで割り当てられたことでした。私は、エディタ属性が割り当てられていることを示すために、生のサンプルに入れました。

[ 
    CategoryAttribute("5 - Wind"), 
    DisplayName("Factored Area"), 
    Description("The factored area for the segment."), 
    EditorAttribute(typeof(UITypeEditor), typeof(UITypeEditor)), // RESET THE UITYPEEDITOR to "nothing" 
    ReadOnly(true) 
] 
public FactoredAreaClass FactoredArea { ... } 

[ 
    CategoryAttribute("5 - Wind"), 
    DisplayName("Factored Area Modifier"), 
    Description("The factored area modifier."), 
    // the EditorAttribute and TypeConverter are part of FactoredAreaClass 
] 
public FactoredAreaClass FactoredAreaMod { ... } 
0

境界型プロパティが読み取り専用の場合は、モーダルスタイルを使用しないでください。幸いなことに、コンテキストはGetEditStyleメソッドで提供されています。

public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) 
{ 
    return context.PropertyDescriptor.IsReadOnly 
      ? UITypeEditorEditStyle.None 
      : UITypeEditorEditStyle.Modal;  
}