Trayicon BallonText Zugriff

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von TTX.exe.

    Trayicon BallonText Zugriff

    Hoi Zämme,

    ich hab gerade ein Problem mit dem TrayIcon, mit dem ich nicht weiterkomme. Ich versuche gerade folgendes zu nutzen:

    VB.NET-Quellcode

    1. ​ TrayIcon.BalloonTipText = "TipText"
    2. TrayIcon.BalloonTipTitle = "TipTitle"
    3. TrayIcon.ShowBalloonTip(3000)


    Das TrayIcon wird in einer Main Sub (main.vb) generiert, das sieht so aus:

    VB.NET-Quellcode

    1. ​Public Class MyContext
    2. Inherits ApplicationContext
    3. Public WithEvents TrayIcon As New NotifyIcon
    4. Private WithEvents CMS As New ContextMenuStrip
    5. Private WithEvents About As New ToolStripMenuItem("About", My.Resources.about16)
    6. Private WithEvents Options As New ToolStripMenuItem("Options", My.Resources.settings16)
    7. Private WithEvents Update As New ToolStripMenuItem("Check for APP update", My.Resources.updates16)
    8. Private WithEvents ExitMenu As New ToolStripMenuItem("Exit", My.Resources.end16)
    9. Public Sub New()
    10. 'codebla
    11. End Sub
    12. End Class


    Mein Problem ist nun, wie kann ich die Balloon Funktion von einer anderen Form z.B. aufrufen? Das TrayIcon ist irgendwie nicht auffindbar :S
    : NV Updater | Nvidia Driver Update Tool
    Hey,

    nun generell ist es so, dass die Klasse, die ein Object erzeugt, auch für die "Verwaltung" des Objects zuständig sein sollte. In Deinem Fall ist es die Klasse MyContext. Wenn man dies mal von oben betrachtet, ist MyContext quasi die Mami von Deiner anderen Form, solange MyContext auch die andere Form erzeugt und verwaltet. Dies resultiert in einer Art Hierachie. Hier ein Beispiel....

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents _trayIcon As New NotifyIcon()
    3. Private _form2 As New Form2()
    4. Public Sub New()
    5. InitializeComponent()
    6. _trayIcon.Icon = New Icon("icon.ico")
    7. _trayIcon.Visible = True
    8. _trayIcon.BalloonTipText = "Form1"
    9. _trayIcon.BalloonTipTitle = "Form1"
    10. _trayIcon.ShowBalloonTip(3000)
    11. _form2.Show()
    12. End Sub
    13. End Class


    Ich arbeite hier nicht direkt mit einem Context, aber das Prinzip ist das selbe. Form1 erzeugt das NotifyIcon und die Form2. Form1 ist also die Mama von beiden. In dieser Hierachie ist es nun so, dass wenn die Mama was vom Kind will, die Mama das Kind direkt ansprechen kann. Im Beispiel werden die Variablen _form2 und _trayIcon zur direkten Ansprache verwendet.

    Umgekehrt, will das Kind was von der Mami, fragt es die Mutter danach. Sprich, das Kind sollte ein Event in der Mutterklasse auslösen. Was man in Etwa so machen kann.....

    VB.NET-Quellcode

    1. Public Class Form2
    2. Public Event ShowNotification As EventHandler(Of NotificationEventArgs)
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. RaiseEvent ShowNotification(Me, New NotificationEventArgs("Form2", "From Form2", 3000))
    5. End Sub
    6. End Class


    Die Klasse Form2 (Kind) implementiert ein Event, welches von der Mama aufgefangen und entsprechend verarbeitet wird. In diesem Fall wird dem Event eine Instanz von NotificationEventArgs mitgegeben. Diese Klasse sieht so aus....

    VB.NET-Quellcode

    1. Public Class NotificationEventArgs : Inherits EventArgs
    2. Public ReadOnly Property Title As String
    3. Public ReadOnly Property Text As String
    4. Public ReadOnly Property Duration As Integer
    5. Public Sub New(title As String, text As String, duration As Integer)
    6. Me.Title = title
    7. Me.Text = text
    8. Me.Duration = duration
    9. End Sub
    10. End Class


    Zu guter letzt noch die Verarbeitung des Events in der Mutterklasse.....

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents _trayIcon As New NotifyIcon()
    3. Private _form2 As New Form2()
    4. Public Sub New()
    5. InitializeComponent()
    6. _trayIcon.Icon = New Icon("icon.ico")
    7. _trayIcon.Visible = True
    8. _trayIcon.BalloonTipText = "Form1"
    9. _trayIcon.BalloonTipTitle = "Form1"
    10. _trayIcon.ShowBalloonTip(3000)
    11. _form2.Show()
    12. AddHandler _form2.ShowNotification, AddressOf ShowNotification
    13. End Sub
    14. Private Sub ShowNotification(sender As Object, e As NotificationEventArgs)
    15. _trayIcon.BalloonTipTitle = e.Title
    16. _trayIcon.BalloonTipText = e.Text
    17. _trayIcon.ShowBalloonTip(e.Duration)
    18. End Sub
    19. End Class


    Mit AddHandler wird dem Event eine passende Routine zugeordnet, wo die Abarbeitung stattfindet. Hier ist auch wieder zu sehen, wie die Mama mit dem Kind (_trayIcon) kommuniziert, der Auslöser aber das andere Kind (_form2) war.... Man sollte diese hierachische Struktur wenn möglich einhalten, um den Überblick nicht zu verlieren und um den Zugriff auf die Controls an einer Stelle zu regeln.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    TTX.exe schrieb:

    VB.NET-Quellcode

    1. Inherits ApplicationContext
    ist ne l(i|u)stige Sache.
    Insbesondere dann, wenn logisch keine "absolute" MainForm vorkommt.
    Alle Deine Objekte müssen dann in MyContext instanziiert und verwaltet werden.
    Die Kommunikation erfolgt dann, wie @SpaceyX schrieb, von MyContext in die anderen Instanten per Direktaufruf, ggf. musst Du da ein paar Methoden für bereitstellen, andersherum per Event. MyContext muss dann ggf. die Meldung an andere Instanzen durchreichen.
    Also:
    Falls Du eigentlich mit einer MainForm arbeitest und nur mal testen wolltest, wie das mit ApplicationContext funktioniert:
    Habe gelernt, brich den Versuch ab und kehre zur MainForm zurück.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @SpaceyX
    Oh wow cool danke dir, da muss man erstmal drauf kommen :S ^^ , aber du hast das echt super erklärt und ich hab es zum laufen gebracht jetzt.

    @RodFromGermany
    Ne eine MainForm brauch ich in dem Sinne nicht, da es eine Tray-Anwendung ist, ich meine sogar der Code zum das so machen kam von VS selber. Tatsächlich verbraucht die APP auch so weniger Speicher als mit einer MainForm die dann versteckt wird.
    : NV Updater | Nvidia Driver Update Tool