2016-11-02 5 views
0

J'ai essayé de créer une notification contextuelle pour mes fenêtres, quelque chose comme des toasts dans Android.Notification contextuelle personnalisée Windows Compact Framework

  • Il actif au sujet de
  • Si fichait il devrait toujours être au-dessus (pour la durée, il est actif)
  • Il ne doit pas bloquer la forme active
  • Ce serait bien si son clic creux

Je sais Microsoft.WindowsCE.Forms.Notification mais ça ne va pas bien avec le style d'application, j'ai essayé de créer classe personnalisée qui hérite la notification, mais je ne pouvais pas trouver un moyen de recoiffer il. J'ai également essayé de créer la forme la plus haute, mais cela n'a pas fonctionné non plus, la forme ne serait pas montrée du tout à moins que j'aie utilisé ShowDialog, mais alors il serait autosized à la taille d'écran. Voici un exemple de la façon que j'ai prévu de créer de:

 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(); 

Répondre

1

Microsoft.WindowsCE.Forms.Notification est pas pris en charge sur toutes les plateformes. Vous voudrez peut-être vous en tenir à votre propre implémentation. Et à ce sujet, voici ce que je ferais (pas testé):

Créer un projet de bibliothèque de classes. Ensuite, ajoutez un formulaire. Maintenant, ajoutez un contrôle Label et un contrôle Button comme ci-dessous:

enter image description here

Modifier le formulaire propriétés de:

ControlBox = false 
FormBorderStyle = FixedDialog 
TopMost = true 

Ajoutez le code suivant à la forme:

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; 
    } 
} 

maintenant ajouter une classe :

mis à jour le

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(); 
    } 
} 

utiliser Enfin, il aime:

mis à jour

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

Idées pour prolonger

  • Fournir un accès aux contrôles de formulaire
  • Spécifier l'emplacement & Taille
  • Ajouter une icône.
  • opacité Changement de notification
+0

Cela a fonctionné, mais il y a peu de problèmes, même si son marqué comme séjour sur le dessus, il passe derrière en forme concentrée quand il perd le focus, aussi toutes les formes sont maximisées, lorsque la notification apparaît barre supérieure (avec batterie, signal wifi, etc) apparaît ce qu'elle ne devrait pas (ne peut pas utiliser maximiser car il n'est pas cliqué.) – Aleksandar

+0

Vous avez raison, j'ai ajouté quelque chose pour le garder au top, voir ma mise à jour répondre.Pour la barre du haut, selon la plate-forme, vous pouvez masquer cette barre: Une recherche google simple révélera la réponse. – raidensan

+0

ouais, j'ai réussi à corriger cela en remplaçant concentré et en le rendant faux chaque fois: 'public override bool Focus { obtenir { return false; } } ' De toute façon j'ai réussi à faire ce que je voulais grâce à votre aide. – Aleksandar