0

Windowsフォームアプリケーションで、グラフィックボックスまたは楕円を作成します。実行時に移動を開始したときに、このグラフィックがフォームから出ないようにしたいのですが、このアイデアを実装する方法の1つは、フォームのX座標とY座標を取得することです。グラフィック オブジェクトの x 座標と y 座標から一致させますが、正しく機能していません。フォームの x 座標と y 座標が正しくないと思います。

以下は、グラフィックがフォームの内側または外側にあることを検出するために使用するコードです。

float formX = this.Location.X;
float formY = this.Location.Y;
float formWidth = this.Width;
float formHeight = this.Height;

// x = my graphic x's coordinates
// y = my graphic y's coordinates 
// width = the width of my graphic or the x2 values of my graphic

if ((x > (formX + formWidth) || ((x + width) > (formX + formWidth))
   return true;
else
   return false;

ここで単純なコードについて言及しましたが、x 軸のみでは適切に機能しません。フォームの隅にグラフィックが表示されている場合でも、( formX+ ) の方が大きくなります。width

これから抜け出すために何をすべきかを提案してください。

4

1 に答える 1

0

画像がフォームの左端から外れている場合、関連する端のx座標はformXよりも小さくなります。フォームの右側から外れると、formX + formWidthよりも大きくなるため、条件の前半での比較は間違った方法で行われ、間違った値と比較されます。

if ((x < formX) || ((x + width) > (formX + formWidth)))
   return true;
else
   return false;

少なくとも、それがあなたの望むものだと思います。ロジックがあなたが求めているものから逆になっている可能性がありますが、それは簡単に修正できます。

if-elseステートメントは必要ないため、少しクリーンアップすることもできます。

return (x < formX) || ((x + width) > (formX + formWidth));
于 2013-03-01T09:28:36.683 に答える