Показать форму над областью уведомлений
Я хочу показать 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);
}