Bài viết hôm nay sẽ hướng dẫn các bạn, cách tạo custom control để hiển thị thông báo Toast Message trong lập trình C#, Winform.
Dưới đây là giao diện demo ứng dụng Toast Message Winform:

Đầu tiên, các bạn thiết kế cho mình một form Frm_Alert.cs

Source code Frm_Alert.cs
using CustomAlertBoxDemo.Properties;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CustomAlertBoxDemo
{
public partial class Form_Alert : Form
{
public Form_Alert()
{
InitializeComponent();
}
public enum enmAction
{
wait,
start,
close
}
public enum enmType
{
Success,
Warning,
Error,
Info
}
private Form_Alert.enmAction action;
private int x, y;
private void button1_Click(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
switch(this.action)
{
case enmAction.wait:
timer1.Interval = 5000;
action = enmAction.close;
break;
case Form_Alert.enmAction.start:
this.timer1.Interval = 1;
this.Opacity += 0.1;
if (this.x < this.Location.X)
{
this.Left--;
}
else
{
if (this.Opacity == 1.0)
{
action = Form_Alert.enmAction.wait;
}
}
break;
case enmAction.close:
timer1.Interval = 1;
this.Opacity -= 0.1;
this.Left -= 3;
if (base.Opacity == 0.0)
{
base.Close();
}
break;
}
}
private void pictureBox2_Click(object sender, EventArgs e)
{
timer1.Interval = 1;
action = enmAction.close;
}
public void showAlert(string msg, enmType type)
{
this.Opacity = 0.0;
this.StartPosition = FormStartPosition.Manual;
string fname;
for (int i = 1; i < 10; i++)
{
fname = "alert" + i.ToString();
Form_Alert frm = (Form_Alert)Application.OpenForms[fname];
if (frm == null)
{
this.Name = fname;
this.x = Screen.PrimaryScreen.WorkingArea.Width - this.Width + 15;
this.y = Screen.PrimaryScreen.WorkingArea.Height - this.Height * i - 5 * i;
this.Location = new Point(this.x, this.y);
break;
}
}
this.x = Screen.PrimaryScreen.WorkingArea.Width - base.Width - 5;
switch(type)
{
case enmType.Success:
this.pictureBox1.Image = Resources.success;
this.BackColor = Color.SeaGreen;
break;
case enmType.Error:
this.pictureBox1.Image = Resources.error;
this.BackColor = Color.DarkRed;
break;
case enmType.Info:
this.pictureBox1.Image = Resources.info;
this.BackColor = Color.RoyalBlue;
break;
case enmType.Warning:
this.pictureBox1.Image = Resources.warning;
this.BackColor = Color.DarkOrange;
break;
}
this.lblMsg.Text = msg;
this.Show();
this.action = enmAction.start;
this.timer1.Interval = 1;
this.timer1.Start();
}
}
}
Và cách chúng ta sử dụng ở FrmMain.cs
bên dưới đây:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CustomAlertBoxDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void Alert(string msg, Form_Alert.enmType type)
{
Form_Alert frm = new Form_Alert();
frm.showAlert(msg,type);
}
private void button1_Click(object sender, EventArgs e)
{
this.Alert("Success Alert",Form_Alert.enmType.Success);
}
private void button2_Click(object sender, EventArgs e)
{
this.Alert("Warning Alert", Form_Alert.enmType.Warning);
}
private void button3_Click(object sender, EventArgs e)
{
this.Alert("Error Alert", Form_Alert.enmType.Error);
}
private void button4_Click(object sender, EventArgs e)
{
this.Alert("Info Alert", Form_Alert.enmType.Info);
}
}
}