(C ++ / CLI) Значение свойства вложенной структуры не изменяется в Propertygrid - PullRequest
2 голосов
/ 19 октября 2011

Во-первых, я хотел бы сообщить, что я новичок в программировании на C ++ / CLI, и извиниться, если мой вопрос кажется очень простым.Я искал в Интернете решение в течение всего дня, но безуспешно.

У меня есть структура значений, в которой один из элементов данных имеет другую структуру значений.Все свойства отображаются на панели свойств и доступны для редактирования.Но когда я пытаюсь изменить свойство вложенной структуры, новое значение не сохраняется, и оно немедленно возвращается к 0.Почему это происходит и как мне сохранить значение, введенное для вложенной структуры?

ПРИМЕЧАНИЕ. Я пытался закомментировать void set (nestedStruct value) {temp = value;} но все еще сталкиваются с той же проблемой.

[TypeConverter(ExpandableObjectConverter::typeid)]
public value struct nestedStruct
{
    int z;
    property int Z
    {
        int get()           { return z; }
        void set(int value) { z = value; }
    };
};

public value struct parentStruct
{
    int x;
    property int X
    {
        int get()           { return x; }
        void set(int value) { x = value; }
    };

    int y;
    property int Y
    {
        int get()           { return y; }
        void set(int value) { y = value; }
    };

    nestedStruct temp;
    property nestedStruct Temp
    {
        nestedStruct get()          { return temp; }
        void set(nestedStruct value){ temp = value; }
    };
};

Назначение для сетки свойств:

parentStruct testStruct;
propertyGrid1->SelectedObject = testStruct;
propertyGrid1->ExpandAllGridItems();

1 Ответ

1 голос
/ 20 октября 2011

Я нашел этот пост под тегом C # очень полезным для решения проблемы:

C # PropertyGrid: изменение свойств не работает?

Мне нужно было переопределить только CanConvertFrom () из ExpandableObjectConverter.

public ref class MyExpandableObjectConverter : ExpandableObjectConverter
{
public:
    virtual bool CanConvertFrom(ITypeDescriptorContext^ context, Type^ sourceType) override
    {
        if (sourceType == String::typeid) 
            return true;
        else 
            return ExpandableObjectConverter::CanConvertFrom(context, sourceType);
    }
};

и используйте новый конвертер типов:

[TypeConverter(MyExpandableObjectConverter::typeid)]
public value struct nestedStruct
{
    int z;

    property int Z
    {
        int get()           { return z; }
        void set(int value) { z = value; }
    };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...