के लिए डिफ़ॉल्ट अंतर्निहित संपादक मुझे कहीं भी इसका जवाब नहीं मिल रहा है। 3.5 फ्रेमवर्क PropertyGrid नियंत्रण में कौन से डिफ़ॉल्ट संपादक/कनवर्टर्स निर्माण कर रहे हैं। अन्यथा मैं किस वस्तु प्रकार पर फेंक सकता हूं और यह विश्वसनीय रूप से दिखाने और संपादित करने में सक्षम हो सकता है? मुझे कस्टम संपादकों का उपयोग करने पर बहुत सारे ट्यूटोरियल मिले हैं (जो मैं किसी बिंदु पर कर सकता हूं)। लेकिन अभी मेरे कार्यक्रम में मैं उपयोगकर्ता को अपनी खुद की कस्टम प्रॉपर्टी बनाने की इजाजत दे रहा हूं और मैं जानना चाहता हूं कि मुझे किस ऑब्जेक्ट प्रकारों को यह मानने की अनुमति देनी चाहिए कि वे उन्हें PropertyGrid में संपादित करेंगे।PropertyGrid नियंत्रण
उत्तर
आप UITypeEditor
(System.Drawing.Design
namespace में) से प्राप्त कक्षाओं पर एक नज़र डालना चाहते हैं। इन प्रकारों को EditorAttribute
(System.ComponentModel
namespace में) के पैरामीटर के रूप में पारित किया जाएगा।
आप इस प्रकार के मेटाडेटा को भी देख सकते हैं कि EditorAttribute
लागू किया गया है। हालांकि, प्रतिबिंब का उपयोग न करें, क्योंकि PropertyGrid
class उपयोग नहीं करता है।
इसके बजाय प्रकार पर गुणों के लिए संपत्ति वर्णनकर्ता प्राप्त करने के लिए TypeDescriptor
class का उपयोग करें (स्थिर GetProperties
method पर कॉल करें)। फिर, PropertyDescriptor
उदाहरण के साथ, उस संपत्ति के संपादक का उदाहरण प्राप्त करने के लिए GetEditor
method पर कॉल करें।
आप वास्तव में PropertyGrid पर किसी ऑब्जेक्ट को फेंक सकते हैं। यह स्वचालित रूप से बहुत सी चीजें करेगा। यदि आप एक विशेष संपादन अनुभव चाहते हैं, तो आपको केवल कस्टम यूआई प्रकार के संपादकों को बनाने की आवश्यकता है, जो मूल रूप से प्रदान नहीं किया जाता है। और यहां तक कि उस मामले में आप प्रति संपत्ति करते हैं, न कि पूरे वस्तु के लिए।
प्रॉपर्टीग्रिड टाइपकॉन्टर का उपयोग करता है और प्रत्येक प्राचीन प्रकार (साथ ही आदिम प्रकार के संग्रह) के लिए टाइपकॉन्टर हैं।
जब तक आप प्राचीन प्रकारों में से एक का उपयोग कर रहे हैं या प्राचीन प्रकार के संग्रह का उपयोग कर रहे हैं, तो संपत्ति ग्रिड एक संपादन UI प्रदान करने का ख्याल रखने में सक्षम होना चाहिए।
UITypeEditors के अलावा, PropertyGrid किसी भी ऑब्जेक्ट को टाइपकॉन्टर के साथ प्रदर्शित करने में सक्षम है जो CanConvertFrom (स्ट्रिंग) के लिए सच है। इसे पूरा करने के लिए आप अपने ऑब्जेक्ट प्रकारों को विशिष्ट ऑब्जेक्ट प्रकारों के लिए कार्यान्वित कर सकते हैं।
ध्यान रखें कि कुछ गैर-सार्वजनिक वर्ग हैं।
System.Object
System.Drawing.Design.UITypeEditor
System.ComponentModel.Design.CollectionEditor
System.ComponentModel.Design.ArrayEditor
System.Web.UI.Design.CollectionEditorBase
System.Web.UI.Design.WebControls.WizardStepCollectionEditor
System.Web.UI.Design.WebControls.EmbeddedMailObjectCollectionEditor
System.Web.UI.Design.WebControls.HotSpotCollectionEditor
System.Web.UI.Design.WebControls.ListItemsCollectionEditor
System.Web.UI.Design.WebControls.MenuItemStyleCollectionEditor
System.Web.UI.Design.WebControls.RoleGroupCollectionEditor
System.Web.UI.Design.WebControls.StyleCollectionEditor
System.Web.UI.Design.WebControls.SubMenuStyleCollectionEditor
System.Web.UI.Design.WebControls.TableCellsCollectionEditor
System.Web.UI.Design.WebControls.TableRowsCollectionEditor
System.ComponentModel.Design.BinaryEditor
System.ComponentModel.Design.DateTimeEditor
System.ComponentModel.Design.MultilineStringEditor
System.ComponentModel.Design.ObjectSelectorEditor
System.Windows.Forms.Design.AnchorEditor
System.Windows.Forms.Design.BorderSidesEditor
System.Windows.Forms.Design.DockEditor
System.Windows.Forms.Design.FileNameEditor
System.Windows.Forms.Design.FolderNameEditor
System.Windows.Forms.Design.ShortcutKeysEditor
System.Web.UI.Design.ConnectionStringEditor
System.Web.UI.Design.DataBindingCollectionEditor
System.Web.UI.Design.ExpressionsCollectionEditor
System.Web.UI.Design.UrlEditor
System.Web.UI.Design.XmlFileEditor
System.Web.UI.Design.WebControls.DataGridColumnCollectionEditor
System.Web.UI.Design.WebControls.DataControlFieldTypeEditor
System.Web.UI.Design.WebControls.MenuBindingsEditor
System.Web.UI.Design.WebControls.MenuItemCollectionEditor
System.Web.UI.Design.WebControls.ParameterCollectionEditor
System.Web.UI.Design.WebControls.RegexTypeEditor
System.Web.UI.Design.WebControls.TreeNodeCollectionEditor
System.Web.UI.Design.WebControls.TreeViewBindingsEditor
System.Web.UI.Design.WebControls.DataPagerFieldTypeEditor
System.Messaging.Design.QueuePathEditor
System.Drawing.Design.ImageEditor
System.Drawing.Design.ColorEditor
System.Drawing.Design.ContentAlignmentEditor
System.Drawing.Design.CursorEditor
System.Drawing.Design.FontEditor
System.Drawing.Design.FontNameEditor
System.Drawing.Design.IconEditor
System.Workflow.ComponentModel.Design.TypeBrowserEditor
System.Workflow.ComponentModel.Design.BindUITypeEditor
लेकिन यह सब कुछ स्वचालित रूप से क्या करेगा? अभी मैं कस्टम संपादकों से निपटना नहीं चाहता हूं। मैंने विभिन्न संख्याओं, स्ट्रिंग, बूल और डेटटाइम की कोशिश की है और वे सभी या तो काम करते हैं या संपादकों में निर्मित होते हैं। मैं उम्मीद कर रहा था कि सभी प्रकार के किसी भी सूची में डिफ़ॉल्ट रूप से संपादित किया जा सकता है। –
यदि आप एक विशेषता के रूप में संलग्न UITypeEditor है या नहीं, तो आप अपनी संपत्ति प्रकारों के विरासत पदानुक्रम को देख सकते हैं। डिफ़ॉल्ट रूप से प्रॉपर्टी ग्रिड को स्ट्रिंग से/प्राप्त करने के लिए या तो एक संपादक या एक प्रकार कनवर्टर की आवश्यकता होती है। – grover