Alex Alex - 29 days ago 15
C# Question

Windows Compact Framework custom popup notification

I've been trying to create popup notification for my windows, something like toasts in android.


  • It Shouldn't care about active from

  • It Should always be on top (for duration it's active)

  • It Shouldn't block currently active form

  • It Would be nice if its click trough



I know about Microsoft.WindowsCE.Forms.Notification but it doesn't go well with style of application, i tried creating custom class that inherits Notification, but i couldn't find a way to restyle it. I also tried creating topmost form, but that didn't work either, form wouldn't be show at all unless i used ShowDialog, but then it would be autosized to screen size.Here is sample of the way i was planning to create that from:

Form frm = new Form();
frm.TopMost = true;
Label lbl = new Label();
lbl.Text = "TEST";
lbl.Parent = frm;
frm.Bounds = new Rectangle(15, 15, 150, 150);
frm.WindowState = FormWindowState.Normal;
frm.FormBorderStyle = FormBorderStyle.None;
frm.AutoScaleMode = AutoScaleMode.None;
frm.Show();

Answer

Microsoft.WindowsCE.Forms.Notification is not supported in all platforms. You might want to stick to your own implementation. And about that, here is what I'd do(not tested):

Create a Class Library project. Then add a Form. Now add a Label control and a Button control as below:

enter image description here

Edit Form's properties:

ControlBox = false
FormBorderStyle = FixedDialog
TopMost = true  

Add the following code to form:

public partial class FormNotification : Form
{
    private Timer timer;
    public int Duration { get; private set;}

    public FormNotification(string message, int duration)
    {
        InitializeComponent();

        this.labelMessage.Text = message;
        this.Duration = duration;

        this.timer = new Timer();
        this.timer.Interval = 1000;
        this.timer.Tick += new EventHandler(timer_Tick);
    }

    void timer_Tick(object sender, EventArgs e)
    {
        if (Duration <= 0)
            this.Close();
        this.Duration--;
    }

    private void buttonHide_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void FormNotification_Load(object sender, EventArgs e)
    {
        this.timer.Enabled = true;
    }
}

Now add a class:

updated

public class CNotification
{
    public CNotification()
    {

    }

    public static void Show(Form owner, string message, int duration)
    {
        FormNotification formNotification = new FormNotification(message, duration);
        formNotification.Owner = owner;
        formNotification.Show();
    }
}

Finally use it like:

updated

// assuming call from a form
CNotification.Show(this, "Hello World", 5);

Ideas for Extending

  • Provide access to Form's controls
  • Specify Location & Size
  • Add an icon.
  • Change opacity of notification
Comments