Показать форму над областью уведомлений - PullRequest
6 голосов
/ 05 сентября 2010

Я хочу показать 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();
}

Ответы [ 3 ]

8 голосов
/ 05 сентября 2010

Я только что попробовал это, и это сработало для меня ( примечание : этот код должен появиться после форма была отображена в первый раз - например, вы можете поставить его в обработчике событий формы 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);

Использование WorkingArea или Bounds зависит от того, что вы подразумеваете под «над»: если вы имеете в виду «перед», то используйте Bounds, поскольку оно включает область, охватывающую весь экран (включая пространство, занимаемое системным треем); если вы имеете в виду «выше», тогда используйте WorkingArea, который включает в себя только рабочий стол пользователя.

Также позвольте мне пояснить, что вы хотите, чтобы ваша фактическая форма отображалась там, верно? Если вам нужна иконка в области уведомлений, для этого нужен компонент NotifyIcon.

5 голосов
/ 05 сентября 2010

Вы забыли это:

        fm.StartPosition = FormStartPosition.Manual;

Далее вам нужно будет поработать над тем, чтобы поместить панель задач, скажем, в левую часть экрана, и запустить код на компьютере, который имеетнастройка видео DPI с другим значением (например, 125).Вы можете точно позиционировать форму только в событии Load.Не устанавливайте размер клиента.

4 голосов
/ 05 сентября 2010

Если вы хотите расположить форму поверх / впереди панели задач:

Установите для свойства 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);
}
...