2016-11-02 4 views
0

Ich habe versucht, Popup-Benachrichtigung für meine Fenster zu erstellen, so etwas wie Toast in Android.Windows Compact Framework benutzerdefinierte Popup-Benachrichtigung

  • Es sollte nicht über aktiv von
  • Pflege soll es immer oben sein (für die Dauer aktiv, es ist)
  • Es soll nicht gerade aktive Form blockiert
  • Es wäre schön, wenn sie Klick
  • Trog

ich weiß über Microsoft.WindowsCE.Forms.Notification aber es geht nicht gut mit Stil Anwendung, habe ich versucht, benutzerdefinierte Klasse erstellen, die Mitteilung erbt, aber ich kann nicht einen Weg restyle es finden. Ich habe auch versucht, das oberste Formular zu erstellen, aber das hat auch nicht funktioniert, das Formular würde überhaupt nicht angezeigt werden, wenn ich ShowDialog nicht verwendet hätte, aber dann würde es automatisch auf die Bildschirmgröße skaliert werden. Hier ist ein Beispiel für die Art, wie ich das erstellen wollte von:

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

Antwort

1

Microsoft.WindowsCE.Forms.Notification wird nicht auf allen Plattformen unterstützt. Vielleicht möchten Sie Ihre eigene Implementierung beibehalten. Und darüber, hier ist, was ich tun würde (nicht getestet):

Erstellen Sie ein Klassenbibliothek Projekt. Dann füge ein Formular hinzu. Jetzt ein Label-Steuerelement hinzufügen und ein Button-Steuerelement wie folgt:

enter image description here

Formular bearbeiten Eigenschaften:

ControlBox = false 
FormBorderStyle = FixedDialog 
TopMost = true 

Fügen Sie den folgenden Code in 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; 
    } 
} 

jetzt eine Klasse hinzufügen :

aktualisiert

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

Schließlich verwenden Sie es mögen:

aktualisiert

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

Ideen für die Erweiterung

  • bieten Zugriff auf Formulars Kontrollen
  • Standort angeben & Größe
  • Ein Symbol hinzufügen.
  • ändern Opazität mitteilungs
+0

Das funktionierte, aber es gibt einige Probleme, auch wenn seine markiert als Aufenthalt auf sie hinter konzentriert geht zur Zeit bilden sich, wenn es den Fokus verliert, werden ebenfalls maximiert alle Formen, wenn eine Benachrichtigung angezeigt Top-Leiste (mit Akku, WLAN-Signal, etc.) erscheint, die es nicht sollte (kann nicht maximieren, da es nicht durch Klicken ist. – Aleksandar

+0

Sie haben Recht, ich habe etwas hinzugefügt, um es oben zu halten, siehe meine aktualisiert Antworten.Für die obere Leiste können Sie diese Leiste je nach Plattform ausblenden: Eine einfache Google-Suche zeigt die Antwort an. – raidensan

+0

ja, gelang es mir, das zu beheben, indem Sie fokussiert zwingende und es return false jedes Mal machen: ‚public override bool Focused { erhalten { return false; } } ' Wie auch immer ich es geschafft habe zu tun, was ich wollte, dank Ihrer Hilfe. – Aleksandar

Verwandte Themen