Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何从另一个类更改一个类的颜色属性?_Vb.net_Class_Reference - Fatal编程技术网

Vb.net 如何从另一个类更改一个类的颜色属性?

Vb.net 如何从另一个类更改一个类的颜色属性?,vb.net,class,reference,Vb.net,Class,Reference,这有点难以解释,但基本上: 我想从另一个类更改类的Color属性:在本例中,是一个动画类 Form1->包含对象“ShapeClass”->包含“FillColor”和 “位置”属性 AnimatorClass->包含变量“SubjectProperty”,它是 对象,该对象的值在整个动画中更改。潜艇 “run()”将更改“ShapeClass”对象中的值 下面是动画的工作原理: Dim Shape1 as ShapeClass = new ShapeClass() Dim anim as An

这有点难以解释,但基本上:

我想从另一个类更改类的Color属性:在本例中,是一个动画类

Form1->包含对象“ShapeClass”->包含“FillColor”和 “位置”属性

AnimatorClass->包含变量“SubjectProperty”,它是 对象,该对象的值在整个动画中更改。潜艇 “run()”将更改“ShapeClass”对象中的值

下面是动画的工作原理:

Dim Shape1 as ShapeClass = new ShapeClass()
Dim anim as AnimatorClass = new AnimatorClass()
anim.SubjectProperty = Shape1.Position
anim.run()
动画将成功运行:实际更改Shape1对象的位置属性


但是,只要将Drawing.Color用作SubjectObject,Shape1.FillColor中的实际值就不会更改。在所有其他情况下,SubjectProperty变量似乎是对ShapeClass中实际属性的引用,如果要更改SubjectProperty,请转到它引用的属性,但在Drawing.Color类中似乎不会发生这种情况

有人能告诉我为什么会这样,以及如何解决它吗?谢谢


(如果我解释得不好的话,那就是道歉)

您看到的问题很可能是引用类型和值类型之间的差异。
位置的类型是什么?另外,向我们展示实际修改
SubjectProperty
内容的代码“Drawing.Color类似乎不会发生这种情况”。这是因为
Drawing.Color
不是一个类。它是一种结构,即一种值类型。将值类型从一个位置指定到另一个位置将创建副本,而指定引用类型将创建对同一对象的另一个引用。一旦您提供了更多的信息,以便我们确定发生了什么,我们可能会提供一个解决方案。想到的是使用Refelection并传入一个
PropertyInfo
对象,您可以在该对象上调用
SetValue
。LINQ可能也能帮上忙。我无法真正显示代码,因为我的实际代码大约有300行,基本上不可能缩小范围。我可能应该包括
Position
是一个类,它存储x和y位置。这些细节其实并不重要,只是它是一个用来描述形状位置的类。调用run()时,代码基本上是这样做的:
SubjectProperty=Value
@jmcilhinney:谢谢你指出了那幅画。颜色是一种结构,我真的不知道。我会看看反射和LINQ,尽管我有一个很快的问题:VB.NET中的反射与C++中的指针变量是否相似?不,反射不会像指针那样。基本上,您必须为要设置的属性创建一个
PropertyInfo
,然后将其与要设置它的对象一起传递。然后调用属性信息的
SetValue
方法,并传递要设置属性的对象和要设置属性的值。