2009-05-28 45 views
5

Tôi có một ứng dụng sử dụng NotifyIcon trong khay để ẩn/khôi phục ứng dụng, cũng như bật thông báo cho người dùng về các sự kiện ứng dụng. Ứng dụng của tôi có hàng đợi thông báo và tôi sử dụng sự kiện NotificationIcon.BalloonTipClosed để xác định thời điểm đặt lại bong bóng và hiển thị thông báo tiếp theo (nếu có thông báo trong hàng đợi). Phương pháp này dường như hoạt động tốt trong cả hai nguyên nhân thông thường (người dùng cho phép bong bóng tự đóng khi nó hết giờ và người dùng nhấp vào "X" trong bóng để buộc đóng), nhưng có trường hợp thứ ba mà BalloonTipClosed không làm ' t được gọi là:Làm cách nào để biết liệu đầu bóng trên khay hệ thống đã đóng chưa?

  1. Notification bóng bật lên
  2. trong khi nó có thể nhìn thấy, người dùng phải nhấp chuột vào biểu tượng thông báo để đưa lên trình đơn ngữ cảnh, gây ra bóng để biến mất

sự kiện BalloonTipClosed doesn' t được kích hoạt trong này Ví dụ - Tôi tìm nó là một lỗi trong khuôn khổ (tôi đang sử dụng 2.0), nhưng không ai có một ý tưởng xung quanh này? Nếu tôi không nhận được sự kiện này, ứng dụng của tôi luôn nghĩ rằng có một bóng có thể nhìn thấy (tôi có một boolean ngăn không cho nó hiển thị nhiều bong bóng cùng một lúc), và nó sẽ không bao giờ hiển thị lại biểu tượng khác, miễn là nó đang chạy.

Trả lời

0

Đây là những gì tôi đã kết thúc, mặc dù tôi không đặc biệt thích giải pháp này. Tôi đã thêm một bộ đếm thời gian thứ hai vào biểu mẫu và đặt nó trong 10 giây. Khi một thông báo bật lên (khi tôi bật một), tôi bắt đầu hẹn giờ, và sau đó trong BalloonTipClosed, tôi dừng nó lại. Nếu bộ đếm thời gian được đánh dấu (nghĩa là BalloonTipClosed chưa chạy), tôi sẽ hiển thị mẹo tiếp theo theo cách thủ công.

Kết quả là nếu nó chưa được kích hoạt, tôi sẽ xử lý nó. Tuy nhiên, tôi mở cửa cho các giải pháp tốt hơn nếu có ai.

0

Trong trình xử lý sự kiện cho sự kiện BalloonTipClicked, tôi sẽ kiểm tra xem nút chuột phải đã được nhấp chưa và liệu nó có được đặt boolean thành false hay không.

3

Đây là một nhận xét cho Câu trả lời của Aarons, nhưng tôi chưa được phép nhận xét.

Nếu bạn xử lý các sự kiện BalloonTipClicked và MouseClick trên NotifyIcon (cũng như BalloonTipClosed) thì bạn có thể chụp tất cả các cách mà quả bóng có thể đóng lại. Điều duy nhất bạn phải nhận thức được là một số scenerios sẽ kích hoạt nhiều sự kiện, vì vậy hãy chắc chắn mã xung quanh (cái gì đó như isClosed = true, và sau đó thiết lập lại khi một quả bóng mới được hiển thị).

+0

Vấn đề ở đây là, trong khi tôi có thể chụp một sự kiện icon_click, và tôi biết bóng đã đóng cửa vào thời điểm đó, tôi 'không chắc chắn khi nào sẽ hiển thị quả bóng tiếp theo. Hiển thị nó ngay lập tức sẽ nằm trên bất cứ điều gì người dùng đang làm xuống đó. Tôi có thể làm điều đó trên một sự chậm trễ sau khi nhấp chuột, và điều này vẫn liên quan đến một bộ đếm thời gian, vì vậy tôi chỉ muốn sử dụng bộ đếm thời gian trong mọi trường hợp. – SqlRyan

+0

Điểm tốt. Giả sử điều duy nhất mà người dùng có thể 'làm xuống đó' là kích hoạt menu ngữ cảnh, nếu bạn xử lý menu Mở và đóng sự kiện và chỉ hiển thị quả bóng tiếp theo nếu menu ngữ cảnh không được kích hoạt. Bạn cũng có thể muốn đưa ra quyết định dựa trên mục trình đơn mà người dùng chọn – Bob

0

Tôi nghĩ bài này từ Raymond Chen về thông báo khinh khí cầu có thể giúp bạn: http://blogs.msdn.com/oldnewthing/archive/2009/05/04/9585032.aspx

+0

Tôi nghĩ đây chính là điều đang xảy ra với tôi, nhưng Raymond đồng ý rằng không có cách nào để biết liệu quả bóng có bị đóng hay không. Dường như với tôi rằng sự kiện BalloonTipClosed sẽ kích hoạt nếu quả bóng được đóng lại theo bất kỳ cách nào, nhưng nó không cháy nếu bạn đóng bóng bằng cách nhấp vào NotifyIcon, như tôi nghĩ là cần. Có lẽ tôi sẽ nâng cấp phiên bản khung công tác của ứng dụng và xem liệu điều này có thay đổi hành vi hay không. – SqlRyan

Các vấn đề liên quan