Показать форму над областью уведомлений

Я хочу показать 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 ответа

Решение

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

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

        fm.StartPosition = FormStartPosition.Manual;

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

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

Установите для свойства 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);
}
Другие вопросы по тегам