سؤال

وعن طريق

<System.ComponentModel.TypeConverter(GetType(System.ComponentModel.ExpandableObjectConverter))> _

وعلى إعلان فئة (والذي هو خاصية من فئة أخرى) التي تتكون من خصائص العدد.

وأنا تحميل مثيل من هذه الفئة مع ببساطة ...

PropertyGrid1.SelectedObject = oColumn

من الواضح أنني لا أريد أن بناء propertygrid في التعليمات البرمجية يدويا، وأنا أعرف كيف نفعل ذلك.

ولكن هنا تكمن المشكلة. اعتمادا على قيمة العقار، يجب أن بعض الخصائص الأخرى لا تكون مرئية، كما لو كنت قد استخدمت

<System.ComponentModel.Browsable(False)> _

والسمة على إعلان الممتلكات.

وهناك على أية حال للقيام بذلك برمجيا، دون الحاجة إلى التعامل مع كل بناء الشبكة الخاصية يدويا>

هل كانت مفيدة؟

المحلول

وإذا كنت تأمل في الحصول على gridItem.Hide () ثم، فإن الجواب هو لا. الطريقة الوحيدة لتحقيق ذلك في MS PropertyGrid بنشر الممتلكات الخاصة بك من خلال طريقة GetProperties من TypeConverter أو العرف نوع اصف (التي تطبق ICustomTypeDescriptor) بشكل حيوي. وأود أن أول محاولة مع TypeConverter (مصممة خصيصا إذا كانت القيم الخاصية التي تريد للتحقق هي على نفس المستوى)، وهناك أقل من الترميز القيام به.

نصائح أخرى

والواقع هذا غير ممكن تماما. أول وأسهل طريقة هي تعيين الخاصية BrowsableAttributes في الشبكة:

propGraph.BrowsableAttributes = new AttributeCollection(
    new Attribute[] 
    { 
        new CategoryAttribute("Appearance")
    });

وهذا سيقوم بتصفية جميع الخصائص التي لا تتطابق مع أنواع-السمة التي قمت بإرسالها. للأسف هذا هو مرشح إيجابي بدلا من مرشح السلبي الذي يجعل من IMHO أقل فائدة.

والثانية، وسهلة على حد سواء، يمكنك إنشاء المجمع بسيطة حول الكائن الذي تريد عرضه في PropertyGrid وإعادة تعريف مهما الخصائص التي تريد إخفاء / الخ. كما خصائص العبور:

public class MyDerivedControl : public TextBox
{
    [Browsable(false)]
    [Category("MyCustomCategory")]
    public new bool Enabled
    {
         get { return base.Enabled }
         set { base.Enabled = value; }
    }
}

وبوب أن إلى شبكة الملكية وسوف الخاصية Enabled يكون مخفي.

وثالثا، يمكنك تخصيص PropertyGrid نفسها والدخول في العالم من نوع واصفات وهكذا دواليك، ولكن إذا كان كل ما تريد القيام به هو إخفاء خصائص الزوجين، وهذا هو افراط.

وآمل أن يساعد هذا.

وأما بالنسبة للC ++، هنا هو الحل السهل أن تظهر الفئة المنتقاة في propertyGrid.

cli::array<Attribute^,1>^ attrs = {gcnew CategoryAttribute("Appearance")};
this->PropertyGrid->BrowsableAttributes = gcnew AttributeCollection(attrs);
this->PropertyGrid->SelectedObject = this->SelectedControl;

وهذا سوف تظهر فقط "المظهر" الفئة في propertyGrid وإخفاء جميع الفئات الأخرى. على افتراض يمكنك ترجمة التعليمات البرمجية في C # نفسك.

هذا السؤال عبارة مماثلة، ولكن الإجابات أكثر اكتمالا. قد يرغب بعض الناس على الإحالة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top