2016-11-02 4 views
0

Я пытался создать всплывающее уведомление для своих окон, что-то вроде тостов в Android.Пользовательское всплывающее уведомление Windows Compact Framework

  • Он не должен заботиться о активен с
  • Это всегда должно быть на вершине (для продолжительности его активной)
  • Он не должен блокировать текущую активную форму
  • Было бы хорошо, если его нажмите желоб

Я знаю о Microsoft.WindowsCE.Forms.Notification, но это не идет хорошо со стилем приложения, я попытался создать пользовательский класс, который наследует уведомление, но я не мог найти способ рестайлинга его. Я также попытался создать самую верхнюю форму, но это тоже не сработало. Форма не будет отображаться вообще, если я не использую ShowDialog, но тогда она будет авторизоваться на размер экрана. Вот пример того, как я планировал создать эту от:

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

ответ

1

Microsoft.WindowsCE.Forms.Notification не поддерживается на всех платформах. Возможно, вы захотите придерживаться своей собственной реализации. И о том, что я буду делать (не проверен):

Создать проект библиотеки классов. Затем добавьте форму. Теперь добавьте этикетки и элемент управления Button, как показано ниже:

enter image description here

свойств формы редактирования в:

ControlBox = false 
FormBorderStyle = FixedDialog 
TopMost = true 

Добавьте следующий код в форму:

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

Теперь добавьте класс :

обновленный

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

Наконец использовать его как:

обновленный

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

Идеи для расширения

  • Обеспечение доступа к элементам управления форм в
  • Укажите местоположение & Размер
  • Добавить значок.
  • Изменения непрозрачность уведомления
+0

Это работало, но есть несколько проблем, даже если его помечен как пребывание на вершине он идет позади в настоящее время сосредоточена форма, когда он теряет фокус, а также все формы максимальны, когда появляется уведомление верхняя панель (с батареей, Wi-Fi-сигналом и т. д.) появляется, что она не должна (не может использовать максимизацию, так как она не нажимает. – Aleksandar

+0

Вы правы, я добавил что-то, чтобы держать его сверху, см. мой обновленный ответ.Для верхнего бара, в зависимости от платформы, вы можете скрыть эту панель: простой поиск по Google покажет ответ. – raidensan

+0

Да, мне удалось исправить это, переопределив фокус и сделав его возвратом false каждый раз: 'public override bool Сфокусировано { { {{{ } } ' Anyways мне удалось сделать то, что я хотел, благодаря вашей помощи. – Aleksandar

 Смежные вопросы

  • Нет связанных вопросов^_^