2011-07-22 12 views
3

は問題です:チェック

私が覚えているアプリケーション(C#.NET、Windows 7の)を持っています退出時のメインフォームの位置。ロード時に設定が取得され、適用されます。デュアルモニターのセットアップを実行するユーザーに問題があります。

ほとんどの場合、ドッキングステーションとセカンダリモニタを備えたHPラップトップを使用しています。ユーザーはラップトップをドッキング解除する必要があることがあります。ユーザーがセカンダリモニタでアプリケーションを実行している場合、アプリケーションをシャットダウンし、ラップトップをドッキング解除してアプリケーションを再起動します(アプリケーションによって場所が記憶されているため)。

2台目のモニターが接続されているかどうかを確認する方法が必要です。ここで


は、私はすでに試みているものです:

System.Windows.Forms.Screen.AllScreensを - この配列は、(私はその事実にその原因を想定して、ラップトップがドッキングされている場合でも、2台のモニタを持っています2番目のモニタはまだコントロールパネル - >ディスプレイに表示されます)

System.Windows.Forms.SystemInformation.MonitorCount - 同じことがこのプロパティに適用されます。

ありがとうございます。


皆さんありがとうございましたが、この場合では、私たちのラップトップでの問題は、以下の通りであった:

我々は、サーバー上で実行されるアプリケーションにアクセスするために私たちのラップトップで2倍のクライアントソフトウェアを使用しています。 2x自体には、互換性タブでデスクトップ構成を無効にする設定があります。このチェックボックスをオフにすると、(ラップトップがドッキング解除されている場合でも)2番目のモニターが常に使用可能に見えます。

したがって、この設定を有効にしていました。

おかげで再び

+0

私は[この質問に詳細に回答しました](http://stackoverflow.com/questions/4681738/how-do-i-determine-if-a-window-is-off-screen/4681861#4681861) )しかし、あなたのラップトップ*は、彼らが追加のモニターを持っていると思っていると思っていますが、私はそれがうまくいくかどうかは分かりません。リンクされた回答に解決策があるか、この問題は解決できません。 –

+0

Codyさん、ありがとうございますが、これでこの問題は修正されません。あなたは私のラップトップはまだ彼らが駅からドッキング解除された後、2つのモニターを持って "考える"と述べたように。私は "アクティブ"モニターをチェックするプロパティがあるかもしれないと思ったが、私は厳しい運があると思う。 – myroslav

+0

2番目のモニタは、コントロールパネル - >ディスプレイにどのくらい正確に表示されますか? Windowsは実際にそれを使用していると思いますか? –

答えて

2

はこれを試してみてください...物事はあなたが(コントロールパネルおよびすべてのモニタを見て)記述されているほど悪くしているが、それはショットの価値がある場合、それは助けないかもしれません。あなたは、フォームの場所をロードするとき、次に

/// <summary> 
    /// Returns whether at least the titlebar of a form would be on a viewable portion of the screen 
    /// </summary> 
    /// <param name="FormLocation">The location of the form</param> 
    /// <param name="FormSize">The size of the form</param> 
    /// <returns></returns> 
    protected bool FormWouldBeVisible(Point FormLocation, Size FormSize) 
    { 
    //The FromPoint method returns the screen OR CLOSEST SCREEN to the point you give... 
    Screen theScreen = Screen.FromPoint(FormLocation); 
    int titleBar = SystemInformation.CaptionHeight; 
    //Test if enough of the title bar will be visible so that the user can move the form if desired... 
    if ((theScreen.Bounds.Bottom >= (FormLocation.Y + titleBar)) && //If the bottom of the screen is below the title bar 
      (theScreen.Bounds.Top <= FormLocation.Y) && //If the top of the screen is above the top of the title bar 
      (theScreen.Bounds.Left <= (FormLocation.X + FormSize.Width - titleBar)) && //If the left of the screen is left of a little bit of the title bar 
      (theScreen.Bounds.Right >= (FormLocation.X + titleBar))) //If the right of the screen is right of a little bit of the title bar 
    { 
     //The form is moveable 
     return true; 
    } 
    //The point at which the form is to be loaded is not on a visible part of any screen 
    else return false; 
    } 

あなたはそれとフォームのサイズをロードしようとするためのポイントを渡す:プロジェクトに次のメソッドを追加します。このフォームは、ユーザーがフォームを移動できるほどにフォームが表示される場合はtrueを返し、そうでない場合はfalseを返します。それが偽の場合は、単にメイン画面に置きます。ドッキングステーションのラップトップを使って自分のプログラムに使用すると、完璧な結果が得られます。しかし、もしあなたのPCが存在しないときに余分なモニターを報告していたら、結果はどうなるでしょう。それが本当に本当なら、私はそれがドッキングステーション(またはWindows ...)の問題だと思うし、あなたはコードを介してこれを回避する良い方法がないかもしれません。