我想更改pictureBox1.Location的值。结果真让我困惑!
Point player;
player = pictureBox1.Location;
player.X += 10; //it works
pictureBox1.Location.X += 10;//it doesn't work!! Why??
所以我试试这个:
pictureBox1.Location = player // it works
有人可以告诉我为什么吗?我只用 head first c#学习了1周的c#,我无法通过互联网或书找到答案。
抱歉,我没有澄清我的问题。我无法建立
pictureBox1.Location.X += 10 .
有一个错误:无法修改'System.Windows.Forms.Control.Location'的返回值,因为它不是变量
我想知道player.X和pictureBox1.Location.X
之间的区别答案 0 :(得分:0)
Location
的类型为Point
,它是一种值类型(struct)。因此,当您访问pictureBox1.Location
时,它会返回该位置的副本。在此副本上更改X
对pictureBox1.Location
无效,因此可能不是您想要的;编译器检测到它并发出错误。
您必须将Point
视为值,而不是包含值的对象。事实X
和Y
属性是不幸的;编写可变结构是一个非常糟糕的主意,但Point
可以追溯到.NET的第一个版本,我想MS还没有意识到它有多糟糕......
答案 1 :(得分:0)
Messagebox也有, 左(R / W) 右(R) 底部(R) 顶部(R / W)
R =只读 R / W =读写
您可以通过键入
获取文本框坐标x的最右侧Int right_x = messagebox.Right;
写
Messagebox.Left += 10;
它完美无缺。
编辑:
Messagebox.Location struct atleast的源代码有类似的内容。
Public struct Location { public int x, y; }
如果你试试这个
messagebox.Location.x += 10;
您正在尝试修改无用变量,而且它毫无意义。 现在这是可能的
Messagebox.Location = new Point(messagebox.Location.x + 10, messagebox.Location.y);
但我之前提供的方法更快,因为它并不关心y轴。