2016-12-08 29 views
0

動的に追加されたコントロールがフォームの外部にあるかどうかを確認しようとしています。
コントロールがフォームCの外にあるかどうかを判断する方法#

最初は、フォームの高さと動的に追加されたコントロールの位置を取得して計算することができると考えました。

しかし、Control.LocationForm.Heightには「共通」がないことに気付きました。

高さと場所の相関関係が本当にわかりません。例えば


私はあなたのフォームが500の高さを持っている、と私は、フォームの下部にコントロールを配置する場合、それは場所を与えるべきであると考えた:X、500(Xは、幅ではなく、関連していますここに)。しかし、これは正しくない、それは私に例を示す:X、465.私は何かを欠いている?

したがって、フォームが1つのピクセルであっても、コントロールがフォームの外にあるかどうかを認識できる必要があります。

私はここでいくつかの似たような疑問を見つけましたが、残念ながら私には本当に答えが与えられません。

これを行う方法はありますか?それを計算することは可能ですか?

+0

フォームとはどういう意味ですか?このウェブか窓ですか? – Liam

+0

フォームの左上隅が(0,0)で、xオフセットが下がり、y右が正です。コントロールは、左上隅またはコントロールの中央のいずれかの参照位置を持つことができます。 – jdweng

+0

@Liam私はあなたを見せるためのコードはありません。これはWindowsフォームです。私が言うことができるのは、ラベル1を持っていて、フォームの一番下に配置し、label1.Locationを取得すると、0、500の代わりに465が表示されます。これはわかりません。 – Sj03rs

答えて

2

フォームのHeightには、タイトルバーと罫線の高さも含まれます。 フォームのClientSizeを使用することができます。

ドキュメントからMSDN上:

フォームのクライアント領域のサイズは、国境を除くフォームとタイトルバーのサイズです。フォームのクライアント領域は、コントロールを配置できるフォーム内の領域です。このプロパティを使用して、グラフィック操作を実行するとき、またはフォーム上のコントロールのサイズと位置を決めるときに、適切な寸法を得ることができます。フォーム全体のサイズを取得するには、Sizeプロパティを使用するか、個々のプロパティHeightとWidthを使用します。

コントロールの位置は、そのコンテナに対してので、(0,0)はフォーム内左上隅あります。

Illustration with control

+0

申し訳ありませんが、入力いただきありがとうございます、私はこれを試してみます。私はタイトルバーと境界線について考えましたが、左上隅にコントロールを置いたときに0、0と書いてありましたが、それは0,30と期待していました。私はちょうど愚かな間違いをしているかもしれません。もう一度ありがとう、私はこれを試してみましょう! – Sj03rs

+0

コンピュータグラフィックスでは、「Y」は通常、数学デカルト平面「Y」と逆です。 – Dusan

+0

申し訳ありませんが、これは素晴らしいです。これが私の必要なものです。ビジュアルと時間をありがとう! – Sj03rs

0

あなたはコントロールかどうかを確認するために、このコードを使用することができ、フォーム内にある:

​​
0

フォームの左上隅には、(0,0)、右下隅である(formHeight、fromWidth )。 フォーム上の2つのテキストボックスをチェックし、このコードをマウス移動イベントに書き込んで、xとyの変化を確認します。

private void Form1_MouseMove(object sender, MouseEventArgs e) 
    { 
     textBox1.Text = e.X.ToString(); 
     textBox2.Text = e.Y.ToString(); 
    } 

フォームの端から返された数値とあなたが選択したサイズには差があることに注意してください。私の500 * 500形式では、実際には460 * 483です。その違いは、任意の境界線スタイルと解像度で常に同じです。

フォームにコントロールを配置するには、フォームの場所構造を使用するか、コントロールの上部および左のプロパティを使用します。上= x、左= y。 測定した実際の高さと幅、およびコントロールの寸法からオフセットを覚えておいてください。 は、右下隅に次の寸法80 * 30とボタンを追加するには私だろう右このような何か:

button1.Location = new System.Drawing.Point(402, 430); 

左下:

button1.Location = new System.Drawing.Point(0, 430); 
関連する問題