Intereting Posts
я получил «Неверная попытка вызвать« Чтение, когда читатель закрыт »при использовании sqldatareader, как его решить в трехуровневой архитектуре Получение широковещательного сообщения в C # Вызов метода Dispose при настройке AutoFixture GDI + исключает сохранение Bitmap в MemoryStream Регистрация веб-приложений Asp.net Core azure Установить месяц отображения в элементе управления календарями WPF О всплывающем окне в ASP.Net Worker Thread Останавливает выполнение, когда он достигает значения в приложении Form C # Windows Form Разрешать зависимости при вызове конструктора с использованием DI с ASP.NET 5 Ищете алгоритм: вырезать форму с отверстиями в группу фигур без отверстий? AJAX ScriptManager в UserControl Свойства Singleton Сохранять и извлекать токен, полученный для пользователя после авторизации с помощью facebook или twitter OO Design – вы используете внутренние объекты или частные поля? Тип «x» в «x.cs» конфликтует с импортированным типом «x»

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

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

    Я просто попробовал это, и это сработало для меня ( обратите внимание : этот код должен появиться после того, как форма была отображена в первый раз – например, вы можете поместить ее в обработчик событий 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 зависит от того, что вы подразумеваете под «over»: если вы имеете в виду «перед», тогда используйте Bounds , так как он включает область, охватывающую весь экран (включая пространство, занимаемое системным лотком); если вы имеете в виду «выше», то используйте WorkingArea , который включает только рабочий стол пользователя.

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

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

      fm.StartPosition = FormStartPosition.Manual; 

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

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

    Установите для свойства TopMost формы значение true. Вы можете использовать Screen.PrimaryScreen.Bounds, чтобы получить разрешение экрана, затем соответствующим образом установите свою позицию.


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

    В конструкторе форм перейдите в Properties-> Events и добавьте событие 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); }