2012-09-16 15 views
9

मैं किसी ऑब्जेक्ट के गुणों का नाम और मान प्रदर्शित करने के लिए अपने एप्लिकेशन में प्रॉपर्टी ग्रिड का उपयोग कर रहा हूं।मैं संपत्ति ग्रिड की कॉलम चौड़ाई कैसे सेट कर सकता हूं?

डिफ़ॉल्ट रूप से कॉलम (नाम और संपत्ति) की चौड़ाई 50:50 के अनुपात में होती है। और हमारे पास इस चौड़ाई को बदलने के लिए स्प्लिटर को स्लाइड करने का विकल्प है। मैं जानना चाहता हूं कि इस चौड़ाई को प्रोग्रामेटिक रूप से कैसे समायोजित किया जा सकता है ताकि इसे 25:75 पर सेट किया जा सके।

उत्तर

2

this जवाब में के रूप में उल्लेख किया गया है:

कि करने के लिए कोई संपत्ति नहीं है और आप नियंत्रण को हैक करने की है। पहले इस कोड को जोड़ें:

public static void SetLabelColumnWidth(PropertyGrid grid, int width) 
{ 
    if (grid == null) 
     throw new ArgumentNullException("grid"); 

    // get the grid view 
    Control view = (Control)grid.GetType().GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(grid); 

    // set label width 
    FieldInfo fi = view.GetType().GetField("labelWidth", BindingFlags.Instance | BindingFlags.NonPublic); 
    fi.SetValue(view, width); 

    // refresh 
    view.Invalidate(); 
} 

और इसे इच्छित आकार के साथ कॉल करें। इस तरह:

SetLabelColumnWidth(propertyGrid1, 100); 
+1

फ़ील्ड का नाम "लेबलविड्थ" मौजूद नहीं है! फिर भी, आकार 50:50 है! –

+1

मैं अपने प्रोजेक्ट में .NET 4.5 का उपयोग करता हूं और कोड के साथ कोई समस्या नहीं है। – hamed

+0

मैं नेट 4 के लिए कोड कैसे बदल सकता हूं? .Net 4 में, कोड कॉलम की चौड़ाई नहीं बदल सकता है! –

-3

आप PropertyGrid के बजाय Smart PropertyGrid.Net का उपयोग करें और इस कोड के साथ अनुपात बदल सकते हैं:

propertyGrid1.LabelColumnWidthRatio = 0.25; 
+1

कृपया मुझे मुफ्त घटक का अनुमान लगाएं! –

0

मैं बढ़ाया PropertyGrid खुला स्रोत आप http://www.codeproject.com/Articles/13630/Add-Custom-Properties-to-a-PropertyGrid पर पा सकते हैं के साथ सफलता मिली है। - बेहतर सब गुण दिखाए फिट करने के लिए स्वचालित रूप से स्प्लिटर ले जाएँ

AutoSizeProperties: यह दो तरीकों आप में रुचि होगी है। MoveSplitterTo - पैरामीटर में उपयोगकर्ता द्वारा संकेत के रूप में स्प्लिटर को ले जाएं।

आप PropertyGrid की Width का 25% की गणना और इसके साथ MoveSplitterTo सेट कर सकते हैं।

मैं वास्तव में AutoSizeProperties का उपयोग करता हूं, क्योंकि यह स्वचालित रूप से स्प्लिटर को लेबल को फिट करने के लिए स्वचालित रूप से स्थानांतरित करता है। ध्यान दें कि SelectedObject सेट करने के बाद आपको AutoSizeProperties सेट करने की आवश्यकता है।

13

मैंने पाया कि हैम्ड का समाधान भरोसेमंद काम नहीं करता है। मैंने इसे प्रोग्रामेटिक रूप से कॉलम स्प्लिटर खींचने वाले उपयोगकर्ता को अनुकरण करके हल किया है। निम्नलिखित कोड यह करने के लिए प्रतिबिंब का उपयोग करता है: फ्रेमवर्क 4.0 के लिए

public static void SetLabelColumnWidth(PropertyGrid grid, int width) 
{ 
    if(grid == null) 
     return; 

    FieldInfo fi = grid.GetType().GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic); 
    if(fi == null) 
     return; 

    Control view = fi.GetValue(grid) as Control; 
    if(view == null) 
     return; 

    MethodInfo mi = view.GetType().GetMethod("MoveSplitterTo", BindingFlags.Instance | BindingFlags.NonPublic); 
    if(mi == null) 
     return; 
    mi.Invoke(view, new object[] { width }); 
} 
+0

धन्यवाद मेरे लिए काम किया –

+0

काम करता है लेकिन फार्म के निर्माण के बाद बुलाया जाना चाहिए (फॉर्म_लोड ईवेंट या बाद में)। – NightElfik

+2

यह काम करता है, लेकिन जब इसे प्रॉपर्टीग्रिड पहले से दिखाई दे रहा है, तो इसे लोड नहीं किया जाना चाहिए। मैंने इस कोड को आकार बदलने के लिए बाध्य कर दिया है, जो एक बटन क्लिक द्वारा नियंत्रण दिखाने के बाद होता है। – ygoe

1

संस्करण (मैं BaseType का इस्तेमाल किया था)। प्रॉपर्टीग्रिड से विरासत में प्राप्त कक्षा में विधि का उपयोग किया जाता है:

private void SetLabelColumnWidth(int width) 
{ 
    FieldInfo fi = this.GetType().<strong>BaseType</strong>.GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic); 
    object view = fi.GetValue(this); 
    MethodInfo mi = view.GetType().GetMethod("MoveSplitterTo", BindingFlags.Instance | BindingFlags.NonPublic); 

    mi.Invoke(view, new object[] { width }); 
} 
संबंधित मुद्दे

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