Avatar billede nicklasw Nybegynder
08. oktober 2006 - 21:55 Der er 4 kommentarer og
1 løsning

notify icon

hej. skal til at skrive et program i vb .net
og det er lidt lang tid siden sidst, så det kan godt være at det er et rimelig lige til problem jeg har...
jeg har en component class der ser sådan ud:

Imports System.Threading
Public Class main
    Inherits System.ComponentModel.Component

#Region " Component Designer generated code "

    Public Sub New(ByVal Container As System.ComponentModel.IContainer)
        MyClass.New()

        'Required for Windows.Forms Class Composition Designer support
        Container.Add(Me)
    End Sub

    Public Sub New()
        MyBase.New()

        'This call is required by the Component Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Component overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Component Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Component Designer
    'It can be modified using the Component Designer.
    'Do not modify it using the code editor.
    Friend WithEvents noty As System.Windows.Forms.NotifyIcon
    Friend WithEvents menu As System.Windows.Forms.ContextMenu
    Friend WithEvents menuitem1 As System.Windows.Forms.MenuItem
    Friend WithEvents menuitem2 As System.Windows.Forms.MenuItem
    Friend WithEvents menuitem3 As System.Windows.Forms.MenuItem
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.components = New System.ComponentModel.Container
        Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(main))
        Me.noty = New System.Windows.Forms.NotifyIcon(Me.components)
        Me.menu = New System.Windows.Forms.ContextMenu
        Me.menuitem1 = New MenuItem
        Me.menuitem2 = New MenuItem
        Me.menuitem3 = New MenuItem
        '
        'noty
        '
        Me.noty.ContextMenu = Me.menu
        Me.noty.Icon = CType(resources.GetObject("noty.Icon"), System.Drawing.Icon)
        Me.noty.Text = "sms server"
        Me.noty.Visible = True
        '
        'menu
        '
        Me.menu.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.menuitem1, Me.menuitem2, Me.menuitem3})
        '
        'menuitem
        '
        menuitem1.Text = "Setting"
        menuitem2.Text = "Status"
        menuitem3.Text = "Exit"

        menuitem1.Index = 0
        menuitem2.Index = 1
        menuitem3.Index = 2
        '

    End Sub

#End Region

    Private Sub menuitem3_exit(ByVal sender As Object, ByVal e As System.EventArgs) Handles menuitem3.Click
        Me.Dispose()
        End
    End Sub

    Public Shared Sub main()
        keepalive()
    End Sub

    Public Shared Sub keepalive()
        Do While True
            System.Threading.Thread.Sleep(50)
            Application.DoEvents()
        Loop
    End Sub

End Class

problemet er at den ikke viser notify iconet og kan ikke lige finde ud af hvad der er galt....

Tak på forhånd

M.V.H
Nicklas
Avatar billede bernhof Nybegynder
27. oktober 2006 - 12:31 #1
Må jeg spørge hvad du bruger keepalive metoden til?
Avatar billede nicklasw Nybegynder
27. oktober 2006 - 14:05 #2
ja.... da det er en Componen class... vil den bare gøre hvad der stod i Main().
keepalive metoden køre i en uenelig løkke og gør at programmet ikke lukke når den bare har udført main() og Application.DoEvents() i keepalive metoden fanger events'ne og udføre dem...
Avatar billede bernhof Nybegynder
31. oktober 2006 - 23:22 #3
Er ikke helt sikker på, at det er nogen særlig hensigtsmæssig løsning. Slet din keepalive metode, og benyt følgende metode istedet, som er lavet til formålet:

  Application.Run()

Og når du skal stoppe applikationen igen:

  Application.Exit()


Med hensyn til dit notify ikon, så når den aldrig så langt. Det eneste som udføres er din Shared Sub Main - og det vil så sige din keepalive metode.

Gør istedet det, at du placerer din Shared Sub Main i en helt anden klasse (og fjerner den fra din main-class9. Klassen kan fx se således ud:

  Public Class StartUp
    Private Shared MainClassInstance As main
 
    Public Shared Sub Main()
      MainClassInstance = New main()
      Application.Run()
    End Sub
  End Class

På denne måde oprettes en ny instans af din component class (og derved dit notify icon).

Se om du kan få det til at virke.
Avatar billede nicklasw Nybegynder
01. november 2006 - 16:22 #4
okay, du må godt lægge et svar...
jeg havde faktisk fået det til at virke, men jeg holdt spørgsmålet åbent, fordi jeg var blevet nysgerig.
Men bare læg et svar ;)
Avatar billede bernhof Nybegynder
02. november 2006 - 01:34 #5
Ok :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester