errorError 1 Cannot modified the return value of 'System.Windows.Forms.Control.Location' because it is not a variable
正解Location
です。プロパティの戻り値は編集できません。ドキュメントによると:
Point
クラスは値型 ( Structure
Visual Basic ではVisual C#) であるためstruct
、値によって返されます。つまり、プロパティにアクセスすると、コントロールの左上点のコピーが返されます。したがって、このプロパティから返されるのX
またはY
プロパティを調整しても、コントロールの、、、またはプロパティの値には影響しません。これらのプロパティを調整するには、各プロパティ値を個別に設定するか、新しい でプロパティを設定します。Point
Left
Right
Top
Bottom
Location
Point
したがって、コードを次のように書き直す必要があります:
(また、関数内で x 値と y 値を持つ座標を扱っているため、パラメータに and以外の名前を付けることを強くお勧めします...)x
y
public void upandunder(Button btn1, Button btn2)
{
if ((btn1.Location.X == btn2.Location.X) && (btn1.Location.Y == btn2.Location.Y))
{
Point originalLocation = btn1.Location;
btn1.Location = btn2.Location;
btn2.Location = originalLocation;
}
}
またはさらに良いのは、プロパティPoint
によって返される2 つの値を比較することです (構造体はoperatorをオーバーロードします)。Location
Point
==
public void upandunder(Button btn1, Button btn2)
{
if (btn1.Location == btn2.Location)
{
Point originalLocation = btn1.Location;
btn1.Location = btn2.Location;
btn2.Location = originalLocation;
}
}
もちろん、それがどのように何かを達成するかはわかりません。最初に、ボタンが互いの上に配置されている (x 座標と y 座標がまったく同じ) ことを確認し、重なっている場合は位置を交換します。それらは既に同じ位置にあります — スワッピング コードを実行する前にテストしました。
関数の名前 ( upandunder
、標準の .NET 命名規則に従う必要がありUpAndUnder
ます) から判断すると、ボタンの Z オーダーを変更したいようです。その場合は、ボタン コントロールのBringToFront
またはメソッドを呼び出す必要があります。SendToBack