2010-05-24 10 views
12

में उप-फ़ील्ड लागू करना ठीक है तो सी # की बात आने पर मेरी शब्दावली बहुत अच्छी नहीं है, इसलिए मैं इसे एक छोटे से उदाहरण के साथ समझाऊंगा। आप एक वर्ग जो आपको एक PropertyGrid भीतर उपयोग कर रहे हैं बना सकते हैं और आप निम्न मान है:प्रॉपर्टीग्रिड

class Test 
{ 
    public Point example { get; set; } 
} 

यह एक PropertyGrid जो एक विस्तार योग्य वस्तु "उदाहरण" जो आदेश में एक बनाने के लिए खेतों एक्स और वाई है है का उत्पादन करेगा "बिंदु"।

मैंने किसी चीज़ "नाम" जो खेतों "firstname" और "lastname" है बनाने के प्रयास कर रहा हूँ, इसलिए मैं है:

class Test 
{ 
    public Name example { get; set; } 
} 

public struct Name 
{ 
    public string firstname { get; set; } 
    public string lastname { get; set; } 
} 

हालांकि यह रूप में इरादा काम नहीं कर रहा।

मुझे लगता है कि मुझे यह काम करने के लिए कुछ विधि (ओं) को ओवरराइड करने की आवश्यकता है, हालांकि मेरे पास वास्तव में प्रॉपर्टीग्रिड्स के लिए शब्दावली नहीं है क्योंकि मेरे लिए समाधान ढूंढना मुश्किल है।

कोई भी मदद महान होगी।

उत्तर

14

बहुत सारे देखने के बाद मैं अंततः इसे समझने में सक्षम था, लापता कीवर्ड "ExpandableObjectConverter" था।

public Form1() 
{ 
    InitializeComponent(); 

    Person x = new Person(); 
    propertyGrid1.SelectedObject = x; 
} 

public class Person 
{ 
    public string Caption { get; set; } 

    [TypeConverter(typeof(ExpandableObjectConverter))] 
    public class Name 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 

     public override string ToString() 
     { 
      return LastName + ", " + FirstName; 
     } 
    } 

    private Name _name = new Name(); 

    public Name testName 
    { 
     get { return _name; } 
    } 
} 

PropertyGrids यकीन है कि भ्रमित कर रहे हैं:

वैसे भी, यहाँ उदाहरण कोड है।

+1

+1 और प्रश्न के लिए +1 आवश्यक है। – ChrisBD

+0

इसे सराहना करने के लिए धन्यवाद, धन्यवाद। – tplaner

+0

[TypeConverter (typeof (ExpandableObjectConverter))] सजावट के लिए धन्यवाद, मैं इसे याद कर रहा था – Pisu

1

मुझे विश्वास है कि इस मामले में स्वत: implimented संपत्ति परिभाषाओं

public string Name { get; set; } 

struct प्रकार लेकिन वर्ग प्रकार के लिए काम नहीं करते। पहले उदाहरण में Point एक वर्ग प्रकार है।

class Name 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 

प्रयास करें तो

class Test 
{ 
    public Name example {get; set;} 
} 

काम कर सकते हैं।

+0

हाँ, मैंने कोशिश की, हालांकि यह भी काम नहीं करता है। क्षेत्र वास्तव में भूरे रंग से बाहर निकला है जो मुझे लगता है कि कुछ को ओवरराइड करने की जरूरत है। – tplaner

+0

हम्म - मुझे एक मशीन पर जांच करनी होगी जो मुझे वीएस देता है। यह इस तथ्य के लिए नीचे हो सकता है कि आपके स्वयं के प्रश्न का उत्तर देने के लिए एक निर्माता को – ChrisBD

संबंधित मुद्दे