6

システムトレイのすぐ上の右下隅にWinFormを表示したいのですが、

それ、どうやったら出来るの?これが私のコードです:

public static void Notify()
{        
    Rectangle workingArea = Screen.PrimaryScreen.WorkingArea;
    Form fm = new Form();
    fm.ClientSize = new Size(200, 200);
    int left = workingArea.Width - fm.Width;
    int top = workingArea.Height - fm.Height;
    fm.Location = new Point(left, top);
    fm.ShowInTaskbar = false;
    fm.ShowIcon = false;
    fm.MinimizeBox = false;
    fm.MaximizeBox = false;
    fm.FormBorderStyle = FormBorderStyle.FixedToolWindow;
    fm.Text = "Test";
    fm.TopMost = true;
    fm.Show();
}
4

3 に答える 3

8

私はこれを試したところ、うまくいきました(:このコードは、フォームが初めて表示されたLoadに表示される必要があります。たとえば、フォームのイベントハンドラーに配置するか、を呼び出した後に含めることができますShow) :

Rectangle workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
int left = workingArea.Width - this.Width;
int top = workingArea.Height - this.Height;

this.Location = new Point(left, top);

使用するWorkingAreaBounds、「上」の意味に依存します。「前」を意味する場合はBounds、画面全体をカバーする領域(システムトレイが占めるスペースを含む)を含むため、を使用します。「上」を意味する場合はWorkingArea、を使用します。これには、ユーザーのデスクトップのみが含まれます。

また、実際のフォームをそこに表示したいということを明確にしておきましょう。通知領域にアイコンが必要な場合は、それがNotifyIconコンポーネントの目的です。

于 2010-09-04T23:13:23.300 に答える
6

あなたはこれを忘れました:

        fm.StartPosition = FormStartPosition.Manual;

次に作業する必要があるのは、たとえば画面の左側にタスクバーを配置し、ビデオDPI設定が異なる値(125など)のマシンでコードを実行することです。フォームは、Loadイベントでのみ正確に配置できます。クライアントサイズを設定しないでください。

于 2010-09-05T00:01:15.933 に答える
5

フォームをタスクバーの上/前に配置する場合:

フォームのTopMostプロパティをtrueに設定します。Screen.PrimaryScreen.Boundsを使用して画面解像度を取得し、フォームの位置を適切に設定できます。


フォームを右下のタスクバーのすぐ上に配置したい場合は、次のように実行できます。

フォームデザイナで、[プロパティ]-> [イベント]に移動し、フォームにLoadイベントを追加します。

以下を追加します。

private void Form1_Load(object sender, EventArgs e)
{
    this.StartPosition = FormStartPosition.Manual;
    int x = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
    int y = Screen.PrimaryScreen.WorkingArea.Height - this.Height;
    this.Bounds = new Rectangle(x, y, this.Width, this.Height);
}
于 2010-09-04T23:09:41.887 に答える