2016-05-18 23 views
0

私はWinformsアプリケーションを持っています。これは、他のフォームを起動するフォームを持っています。それを制御フォームと呼んでいます。現在の画面または下半分の上半分にあるかどうかを確認して参照するように、制御フォームを希望します。上半分にある場合は、他のフォームがその下に表示されます。下半分の場合は、他のフォームが上に表示されます。また、このアプリのユーザーは多くの(4-6)画面を持っていることに注意してください。画面の半分を決定する

私の理論は、現在の画面の高さを見て2で割ったところで、これは中間点のY座標を示しています。

私は、次のコードを持っている:

gadgetBase.Show(); // Gadget base is another form 
var thisScreen = Screen.FromHandle(this.Handle); 
if (this.Location.Y > thisScreen.Bounds.Y/2) 
{ 
    // we're in the top half 
    gadgetBase.Top = this.Bottom + SystemInformation.BorderSize.Height; 
    gadgetBase.Left = this.Left; 
} 
else 
{ 
    // we're in the bottom half 
    gadgetBase.Top = this.Top + SystemInformation.BorderSize.Height + gadgetBase.Height; 
    gadgetBase.Left = this.Left; 

} 

しかし、thisScreen.Bounds.Yは常にゼロです。これは、私が正しいプロパティを使用していないことを示しています。私はこれをどうやってやるべきなのかお勧めしますか? (私のアプローチが偉大ではない場合、私はリワークを気にしません)

+0

もし(this.Location.Y

+0

をフォームは常に必ず半分になるのでしょうか?もしそれがハーフウェイラインに跨っていたらどうなりますか? (また、上半分にあるときに何が起こるかを矛盾した結果で議論する2つの文章があるので、タイプミスが疑わしい) –

+0

@damien_the_unbeliever編集、良い点。それが半分の線であれば、いずれかで十分です。コントローラーが上部または下部に非常に近い場合にのみ、問題を回避しようとしています。私は明日の完全な回答コードを掲示します。 – GinjaNinja

答えて

0

多分あなたは画面の解像度を使用できますか?

Screen ThisScreen = Screen.FromControl(TestForm); 
MessageBox.Show(ThisScreen.Bounds.Width.ToString() + "x" + ThisScreen.Bounds.Height.ToString()); 
+0

これは、プライマリ画面以外のものは考慮しません。上記の私のサンプルでは、​​ 'thisScreen'にはResolutionプロパティがありません。 – GinjaNinja

+0

「スクリーン[] MyScreens = Screen.AllScreens」を使用していますか? – Essigwurst

+0

現在の画面がどのように役立つかわかりませんか? – GinjaNinja

0

以下のコードは、私の元の質問に答える:画面の半分を決定し、それに応じて子フォームを整列:

   gadgetBase.Show(); 
       var thisScreen = Screen.FromControl(this); 
       if (this.Location.Y < thisScreen.Bounds.Height/2) 
       { 
        // we're in the top half 
        gadgetBase.Top = this.Bottom + SystemInformation.BorderSize.Height; 
        gadgetBase.Left = this.Left; 
       } 
       else 
       { 
        // we're in the bottom half 
        gadgetBase.Top = this.Top - SystemInformation.BorderSize.Height - gadgetBase.Height; 
        gadgetBase.Left = this.Left; 

       } 
関連する問題