Пытаюсь создать метод, который будет рисовать окно с неким уведомлением. Уведомление представляет собой форму без границы, на которой размещается Label с требуемым текстом. Уведомление должно отображаться в течении какого-то времени, не захватывая фокус.
В конце-концов, мне удалось окно нужным образом, однако в итоге вместо контрола рисуется фон за окном, т.е. окно выглядит как дырка:
На скриншоте красная рамка - это не рамка, а форма. На "пустом" месте должен быть контрол.
Сам проект, строго говоря, не WinForms, а библиотека классов (4.6) с референсом на System.Wndows.Forms
.
Её код:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace someNamespace
{
public class Overlay
{
class Notification : Form
{
protected override bool ShowWithoutActivation => true;
private const int WS_EX_TOPMOST = 0x00000008;
protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= (WS_EX_TOPMOST);
return createParams;
}
}
public Notification(string Message): base()
{
BackColor = Color.OrangeRed;
FormBorderStyle = FormBorderStyle.None;
Bounds = new Rectangle(10, 10, 320, 240);
var label = new Label();
label.Text = Message;
label.Location = new Point(10, 10);
label.Size = new Size(300, 220);
Controls.Add(label);
Enabled = false;
}
public void Show(int Delay)
{
Deactivate += ShowAgain();
Show();
Task.Delay(Delay).Wait();
Deactivate -= ShowAgain();
Close();
}
EventHandler ShowAgain()
{
return (s, e) => Show();
}
}
static Dictionary<string, Notification> notifications = new Dictionary<string, Notification>();
public void Notify(string Message, int Delay)
{
Application.EnableVisualStyles();
if (!notifications.ContainsKey(Message))
notifications.Add(Message, new Notification(Message));
var n = notifications[Message];
n.Show(Delay);
}
}
}
Консольное приложение, которое дёргает библиотеку:
class Program
{
static Overlay overlay = new Overlay();
static void Main(string[] args)
{
overlay.Notify("Привет!", 5000);
}
}
Как вернуть контрол на место?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть WPF приложение, в котором запускается async методВ методе есть бесконечный цикл, который что-то делает
Есть 2 модели, пользователи и программы (в этом вопросе есть описание моделей)Я хочу отобразить в таблицах все программы из бд, и следом всех...
Есть таблица со столбцом "Дата" формата 2018-03 в sql serverВвел в textBox год 2018 Как вывести в DataGridView все записи c таким годом?