2010-11-03 16 views
5

हैलो यह स्टैक ओवरफ़्लो का मेरा पहला प्रश्न है, इसलिए अगर मैं कुछ बेवकूफ करता हूं तो मुझे माफ़ कर दो। खैर मेरी समस्या यह है कि मैं एक स्तर संपादक पर काम कर रहा हूं और मैं टाइल्स/इकाइयों इत्यादि के गुणों को संपादित करने के लिए प्रॉपर्टीग्रिड नियंत्रण का उपयोग करना चाहता हूं .. इसलिए सबकुछ अब तक काम करता है, मूल्य सही ढंग से दिखाते हैं, गड़बड़ी कोड बदलते समय अद्यतन करते हैं लेकिन समस्या मैं निष्कासन कर रहा हूं कि मैं मूल्यों को तब तक नहीं बदल सकता जब तक यह एक बूलियन न हो, मैं बहुत गुम हो गया लेकिन मुझे बस कोई समाधान नहीं मिला।Winforms PropertyGrid - गुण संपादन योग्य नहीं हैं

[Description("Defines the Position on the screen")] 
    public Vector2 screenpos { get; set; } 
    Vector2 WorldPos; 
    [Description("Defines the texture of the selected tile")] 
    public string texture { get; set; } 
    [Description("Defines if the player can collide with this tile")] 
    public bool IsCollidable { get; set; } 
    [Description("Defines on what layer this tile is drawn (1-3)")] 
    public int Layer { get; set; } 
    [Description("Shows if the tile is currently visible on the screen")] 
    public bool OnScreen { get; private set; } 

मैं IsCollidable संपादित कर सकते हैं और मैं भी संपादित कर सकते हैं अगर मैं परदे पर के सेट से निजी हटा दें कि, लेकिन मैं कुछ और संपादित नहीं कर सकते, ओह और:

यहाँ मैं कहाँ गुण को परिभाषित कोड है अगर आप अपने उत्तरों को थोड़ा सा सरल बना सकते हैं तो मैं सराहना करता हूं, मैं एक बहुत ही अनुभवी प्रोग्रामर नहीं हूं, अग्रिम धन्यवाद।

उत्तर

0

मैंने इसे ठीक किया, मेरे पास यह था। KeyPreview = true; मेरे फॉर्म 1 कन्स्ट्रक्टर में, इसे हटाकर मैं इस मुद्दे को ठीक कर सकता हूं। आपकी सभी मदद के लिए धन्यवाद!

1

आपको अपने Vector2 कक्षा के लिए एक कस्टम यूआई प्रकार संपादक बनाने की आवश्यकता है।

Here's a tutorial

5

सार्वजनिक संपत्ति (जिसे पढ़ा जाता है + लिखना) के साथ अधिकांश मानक प्रकार संपादन योग्य होना चाहिए।

तो Vector2 काफी सरल है, और आप बस इसे PropertyGrid में विस्तार करने के लिए है, तो चाहते हैं: तो आप भी Vector2ही को सजाने कर सकते हैं

[Description("Defines the Position on the screen")] 
[TypeConverter(typeof(ExpandableObjectConverter))] 
public Vector2 screenpos { get; set; } 

तो Vector2 अपने खुद के कोड है, और यह लागू होगी सभी संपत्तियों के लिए:

[TypeConverter(typeof(ExpandableObjectConverter))] 
public {class|struct} Vector2 {...} 

वहाँ भी प्रकार के लिए बाहर अपने ग की यह करने के लिए एक चाल है ontrol; एप्लिकेशन स्टार्टअप पर, चलाएँ:

TypeDescriptor.AddAttributes(typeof(Vector2), 
    new TypeConverterAttribute(typeof(ExpandableObjectConverter))); 
0

समस्या मैं expierencing रहा है कि मैं मूल्यों को बदल नहीं सकते जब तक कि यह एक बूलियन

मैं जो यह बताता है अपने कोड में कुछ भी नहीं दिख रहा है है। के रूप में इस कम से कम उदाहरण के द्वारा प्रदर्शन आप एक PropertyGrid में संपादन योग्य int या string गुण बनाने के लिए कुछ विशेष करने की ज़रूरत नहीं है:

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication13 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MainForm()); 
     } 
    } 

    public class Test 
    { 
     public string StringProperty { get; set; } 
     public int IntProperty { get; set; } 
     public bool BoolProperty { get; set; } 
    } 

    class MainForm : Form 
    { 
     public MainForm() 
     { 
     var propertyGrid = new PropertyGrid() { Dock = DockStyle.Fill }; 
     this.Controls.Add(propertyGrid); 
     propertyGrid.SelectedObject = new Test(); 
     } 
    } 
} 

मैं ऊपर कोड के साथ सभी तीन गुणों को संपादित कर सकते हैं। आपने यह कैसे निर्धारित किया कि आप "मूल्यों को बदल नहीं सकते"? आप वास्तव में क्या देख रहे हो

+0

मैं उन्हें नियमित संपत्ति ग्रिड की तरह देखता हूं, कुछ भी भूरे रंग से नहीं, मैं पाठ कर्सर और सामान भी ले जा सकता हूं लेकिन यदि मैं टाइप करता हूं (अक्षरों या संख्याओं) कुछ भी नहीं होता है। –

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