2011-12-03 26 views
31

I Tried đoạn mã sau:C# Thay đổi vị trí của một đối tượng lập trình

 this.balancePanel.Location.X = this.optionsPanel.Location.X; 

để thay đổi vị trí của một bảng mà tôi thực hiện trong chế độ thiết kế trong khi chương trình đang chạy nhưng nó sẽ trả về một lỗi:

Cannot modify the return value of 'System.Windows.Forms.Control.Location' because it is not a variable 

vì vậy câu hỏi là làm cách nào tôi có thể làm điều đó?

Trả lời

53

Thuộc tính Location có loại Point là cấu trúc.

Thay vì cố gắng thay đổi Point hiện, cố gắng gán một đối tượng mới Point:

this.balancePanel.Location = new Point(
    this.optionsPanel.Location.X, 
    this.balancePanel.Location.Y 
); 
+0

dấu cảm ơn, nó hoạt động như một nét duyên dáng –

1

Bạn cần phải vượt qua toàn bộ các điểm đến vị trí

var point = new Point(50, 100); 
this.balancePanel.Location = point; 
14

Địa điểm là một struct. Nếu không có bất kỳ thành viên thuận tiện, bạn sẽ cần phải phân công lại toàn bộ Location:

this.balancePanel.Location = new Point(
    this.optionsPanel.Location.X, 
    this.balancePanel.Location.Y); 

Hầu hết các cấu trúc cũng là không thay đổi, nhưng trong trường hợp hiếm hoi (và khó hiểu) rằng nó là có thể thay đổi, bạn cũng có thể sao chép -out, chỉnh sửa, sao chép;

var loc = this.balancePanel.Location; 
loc.X = this.optionsPanel.Location.X; 
this.balancePanel.Location = loc; 

Mặc dù tôi không đề xuất ở trên, vì cấu trúc lý tưởng nên không thay đổi.

+1

+1 để đề cập rằng cấu trúc lý tưởng nên không thay đổi. Kỳ lạ thay ... 'int int X {get; bộ; } 'http://msdn.microsoft.com/en-us/library/system.drawing.point.x.aspx –

7

Sử dụng một trong hai:

balancePanel.Left = optionsPanel.Location.X

hoặc

balancePanel.Location = new Point(optionsPanel.Location.X, balancePanel.Location.Y)

Xem documentation of Location:

Because the Point class is a value type (Structure in Visual Basic, struct in Visual C#), it is returned by value, meaning accessing the property returns a copy of the upper-left point of the control. So, adjusting the X or Y properties of the Point returned from this property will not affect the Left, Right, Top, or Bottom property values of the control. To adjust these properties set each property value individually, or set the Location property with a new Point.

2

Nếu bằng cách nào đó balancePanel sẽ không làm việc, bạn có thể sử dụng này:

this.Location = new Point(127,283); 

hoặc

anotherObject.Location = new Point(127,283) 
0

Khi bảng điều khiển cha mẹ đã bị khóa bộ tài sản cho đúng, chúng ta không thể thay đổi thuộc tính vị trí và thuộc tính vị trí sẽ hành động như chỉ đọc vào thời điểm đó.