2009-05-28 88 views
5

Uygulamayı gizlemek/geri yüklemek ve uygulama olayları kullanıcısına bildirimleri açmak için tepside NotifyIcon kullanan bir uygulamam var. Uygulamamın bir bildirim sırası var ve balonun ne zaman sıfırlanacağını ve bir sonraki bildirimi (kuyrukta bir tane varsa) göstereceğini belirlemek için NotificationIcon.BalloonTipClosed olayını kullanıyorum.Sistem tepsisindeki bir Balon ucunun kapalı olup olmadığını nasıl anlarım?

Bu yöntem her zamanki nedenlerden dolayı harika çalışır (kullanıcı zaman aşımına uğradığında balonun kendiliğinden kapanmasına izin verir ve kullanıcı kapatmaya zorlamak için "X" harfini tıklatır), ancak BalloonTipClosed'ın üçüncü bir örneği vardır. t denilen olsun: görünür olsa

  1. bildirim balon
  2. açılır bildirim simgesine kullanıcı sağ tıklama

BalloonTipClosed olay kokan kaybolmaya balon neden bağlam menüsünü getirmek için t tetiklenir örnek - Ben çerçeve içinde bir hata olduğunu düşünüyorum (2.0 kullanıyorum), ama bu konuda herhangi bir fikri olan var mı? Bu etkinliği almazsam, uygulamam her zaman bir balonun görünür olduğunu düşünür (bir kerede birden fazla balon göstermesini engelleyen bir boolum var) ve koştuğu sürece bir daha asla başka bir simge göstermez.

cevap

0

Yaptığım şey, özellikle bu çözümü sevmiyorum. Forma ikinci bir zamanlayıcı ekledim ve 10 saniye için ayarladım. Bir bildirim geldiğinde (bir tane açtığımda), zamanlayıcıyı başlatırım ve sonra BalloonTipClosed'de onu durdururum. Zamanlayıcı işaretlerse (BalloonTipClosed henüz çalışmadığı anlamına gelir), bir sonraki ipucu manuel olarak görüntülerim.

Sonuç, henüz ateşlememiş olsaydı, bununla ilgilenirim. Bununla birlikte, herhangi birine sahipse daha iyi çözümlere açığım.

0

BalloonTipClicked Olayı olay işleyicisinde, sağ fare düğmesinin tıklatılıp tıklanmadığını ve boolean'ın false değerine ayarlanmış olup olmadığını kontrol ederdim.

3

Bu Aarons yanıtına bir yorumda, ancak henüz yorum göndermesine izin verilmiyor.

NotifyIcon'da (ve ayrıca BalloonTipClosed) BalloonTipClicked ve MouseClick olaylarını ele alırsanız, balonun kapatabileceği tüm yolları yakalayabilirsiniz. Farkında olmanız gereken tek şey, birden fazla olayın birden fazla olayı tetikleyeceğidir, bu yüzden bunun için kod yazdığınızdan emin olun (isClosed = true gibi bir şey yapın ve sonra yeni bir balon görüntülendiğinde bunu sıfırlayın).

+0

, ben bir icon_click olayı yakalayabilir ve ben, balon o noktada kapattı biliyorum ederken Bir sonraki balonu ne zaman göstereceğinden emin değilim. Onu hemen görüntülemek, kullanıcının orada ne yapıyorsa onu yerine getirecektir. Tıklamadan sonra gecikme yapabilirdim ve bu hala bir zamanlayıcıyı içeriyor, bu yüzden zamanlayıcıyı tüm durumlarda kullanmayı tercih ederim. – SqlRyan

+0

İyi nokta. Kullanıcının yapabileceği tek şeyi varsayarsak, bir bağlam menüsünü etkinleştirirsiniz, eğer Açılış ve Kapama olayları menüsünü kullanırsanız ve yalnızca bağlam menüsü etkin değilse, sonraki balonu görüntüler. Bu kararı, kullanıcının hangi menü öğesini – Bob

0

Ben balon bildirimleri hakkında Raymond Chen bu mesaj size yardımcı olabilir düşünüyorum: http://blogs.msdn.com/oldnewthing/archive/2009/05/04/9585032.aspx

bu sorunu budur
+0

seçtiğine göre yapmak isteyebilirim, bence bu bana tam olarak ne geliyor, ama Raymond, balonun kapalı olup olmadığını anlamanın hiçbir yolu olmadığını kabul ediyor. Balonun herhangi bir şekilde kapatılmış olması durumunda BalloonTipClosed etkinliğinin devreye girmesi gerektiği düşünülüyor, ama düşünceme göre NotifyIcon'a tıklayarak balonu kapatırsanız ateş etmiyor. Belki de uygulamamın çerçeve sürümünü yeni sürüme geçiririm ve bunun davranışını değiştirip değiştirmediğine bakın. – SqlRyan