Winforms (C+;+;/CLI)嵌套结构';的属性值在Propertygrid中没有更改
首先,我想告诉大家,我对C++/CLI编程非常陌生,如果我的问题看起来很基本,我向您道歉。我一整天都在网上寻找解决方案,但都没有成功 我有一个值结构,它有另一个值结构作为其数据成员之一。所有特性都显示在Propertygrid上,可以编辑。但是,当我尝试修改嵌套结构的属性时,新值不会保留,它会立即恢复为0。为什么会发生这种情况?如何保留为嵌套结构输入的值 注意:我试图注释掉void set(nestedStruct value){temp=value;},但仍然面临相同的问题Winforms (C+;+;/CLI)嵌套结构';的属性值在Propertygrid中没有更改,winforms,c++-cli,Winforms,C++ Cli,首先,我想告诉大家,我对C++/CLI编程非常陌生,如果我的问题看起来很基本,我向您道歉。我一整天都在网上寻找解决方案,但都没有成功 我有一个值结构,它有另一个值结构作为其数据成员之一。所有特性都显示在Propertygrid上,可以编辑。但是,当我尝试修改嵌套结构的属性时,新值不会保留,它会立即恢复为0。为什么会发生这种情况?如何保留为嵌套结构输入的值 注意:我试图注释掉void set(nestedStruct value){temp=value;},但仍然面临相同的问题 [TypeConv
[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();
我发现C#标签下的这篇文章非常有助于解决这个问题:
我只需要覆盖ExpandableObjectConverter中的CanConvertFrom()
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; }
};
};
值类型的标准行为。让它成为一门解决你问题的课程。@HansPassant:谢谢。它解决了这个问题,但出于许多其他原因,我使用value结构作为更大解决方案的一部分。所以我有必要使用value结构。