2012-09-09 13 views
12

画面の左下隅にフォームを配置しようとしています(開始ボタン上)次のコードを実行しようとしていますが、画面の作業領域を占める - その形はちょうどスタートボタンの上に配置されている:画面の左下隅にwinformを配置します

int x = Screen.PrimaryScreen.WorkingArea.Left + this.Width; 
int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height; 
this.Location = new Point(x, y); 

デモ/画面には、さらに私がやろうとしています何を証明するには、以下である:

[Demo Screen](http://i.stack.imgur.com/9mTjj.png)

+4

をあなたは、タスクバーやスタート]ボタンをオーバーラップすることはできません。 –

+5

あなたのソフトウェアをインストールし、それが意図的に私のスタートボタンを隠すように配置されていれば、すぐにアンインストールします。 – Rotem

+1

@Hans Passant答えを参照 – user1559618

答えて

10

Screen.PrimaryScreen.Boundsのプロパティを使用し、this.TopMost = trueを設定します。これは動作します:

int y = Screen.PrimaryScreen.Bounds.Bottom - this.Height; 
this.Location = new Point(0, y); 
this.TopMost = true; 
+0

ありがとうございました、はい、他の人の言うことにもかかわらず、これはうまくいきます:) – user1559618

+0

+1またタスクバーの高さは、図のようにコードに追加されました。 – hamed

0

このコードで試すことができます

Rectangle workingArea = Screen.GetWorkingArea(this); 
this.Location = new Point(0, 
          workingArea.Bottom - Size.Height); 
+1

それはタスクバーの後ろに行くだろう – TigOldBitties

3

通常、作業領域には、タスクバー、ドッキングウィンドウ、ドッキングツールバーは除外されます。 Screen.PrimaryScreen.Boundsを使用すると、画面の高さと幅が完全にわかります。次のように

サンプルコードは次のとおりです。

public Form1() 
     { 
      InitializeComponent(); 
      Rectangle r = Screen.PrimaryScreen.WorkingArea; 
      this.StartPosition = FormStartPosition.Manual; 
      this.Location = new Point(0, Screen.PrimaryScreen.Bounds.Height - this.Height); 
      this.TopMost = true; 
     } 

通常、タスクバーは、デフォルトでは上になるように設定されているように、これは最も可能性の高いタスクバーの下に表示されます。 Windows XPではこのオプションを無効にするオプションがあることを覚えていますが、わかりません。

編集:

Windows XPでは、タスクバーをウィンドウの後ろに置くことができます。リンクに従ってください:Always on top task bar

Riaが指摘しているように、this.TopMostをtrueに設定するとより良い選択肢になります。

+0

私は、スタートバーの上にウィンドウとthis.StartPosition = FormStartPosition.Manualのコードの上にウィンドウを配置する方法を探していた。私が行方不明だった作品だった...ありがとう! – ChronoFish

0

Ria 's answerは正しいですが、タスクバーの高さを追加しませんでした。
あなたが示した画像で、あなたはこのコードを使用する必要があり、正確に何をしたい場合:

int nTaskBarHeight = Screen.PrimaryScreen.Bounds.Bottom - 
              Screen.PrimaryScreen.WorkingArea.Bottom; 
Rectangle workingArea = Screen.GetWorkingArea(this); 
this.Location = new Point(0, workingArea.Bottom - Size.Height + nTaskBarHeight); 
this.TopMost = true; 
関連する問題