errorError 1 Cannot modified the return value of 'System.Windows.Forms.Control.Location' because it is not a variable
正解Locationです。プロパティの戻り値は編集できません。ドキュメントによると:
Pointクラスは値型 ( StructureVisual Basic ではVisual C#) であるためstruct、値によって返されます。つまり、プロパティにアクセスすると、コントロールの左上点のコピーが返されます。したがって、このプロパティから返されるのXまたはYプロパティを調整しても、コントロールの、、、またはプロパティの値には影響しません。これらのプロパティを調整するには、各プロパティ値を個別に設定するか、新しい でプロパティを設定します。PointLeftRightTopBottomLocationPoint
したがって、コードを次のように書き直す必要があります:
(また、関数内で x 値と y 値を持つ座標を扱っているため、パラメータに and以外の名前を付けることを強くお勧めします...)xy
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をオーバーロードします)。LocationPoint==
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