Gå til innhold

Pop-up form stjeler fokus


Anbefalte innlegg

Hei!

 

Jeg har et lite form som skal poppe opp (a la Messenger med beskjeder om at "han/henne har logget på") ved forskjellige intervaller og hendelser. Dette form må selvfølgelig være "On Top", men nå stjeler naturlig nok fokus fra programmet som er i bruk.

 

Hvordan kan jeg hindre det?

Lenke til kommentar
Videoannonse
Annonse

Jeg har ikke prøvd dette, men det er vel bare å deklarere funksjonen slik:

 

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Int32) As Long
End Function

 

Og kalle den slik:

 

ShowWindow(form.Hwnd, 4)

 

(4 = SW_SHOWNOACTIVATE)

 

 

Se forøvrig PInvoke

 

Øyvind

Lenke til kommentar

Prøvde dette:

    <Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, Charset:=Runtime.InteropServices.CharSet.Auto)> _
   Private Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Int32) As Long
   End Function

 

Med

    Private Const SW_SHOWNORMAL = 1
   Private Const SW_SHOWMINIMIZED = 2
   Private Const SW_SHOWMAXIMIZED = 3
   Private Const SW_SHOWNOACTIVATE = 4
   Private Const SW_SHOW = 5

 

 

Men får beskjed om at:

'System.Runtime.InteropServices.DllImportAttribute' cannot be applied to instance method.

 

 

Noen som vet hva som er feil?

Lenke til kommentar

Deklarasjonen skal ihvertfall være statisk på et vis.

 

Fant noe annet på nettet jeg ikke har sett før. Kanskje du kan deklarere slik:

 

Private Declare Auto Function ShowWindow Lib "user32" (ByVal hwnd As IntPtr, ByVal lpString As Int32) As Integer

Lenke til kommentar

Men en ting jeg kom til å tenke på. Foreløpig bruker jeg en timer i hovedform'et (som er skjult) til å trigge aktivering av popup formet. Kan det tenkes at det er timeren som stjeler fokus? Vil det da hjelpe å hive denne i en backgroundworker?

Lenke til kommentar

Timer skal ikke sette fokus på den kontrollen den kjører på. Og unngå Timer i en backgroundworker. Backgroundworkers hovedtask er å gjøre noe og deretter avslutte. Så fremt ikke timern din avslutter.

 

Du trenger heller ikke dra en Timer ut på formen for å ha en timer. Det holder å deklarere Timer i en hvilken som helst klasse.

 

f.eks

Dim mytimer as Timer

Endret av wolf5
Lenke til kommentar
Testet du med alle de forskjellige konstantene for å se om en av dem gjorde det de skulle?

F.eks

ShowWindow(handle, SW_SHOWNOACTIVATE)

Ja. Men kan hende jeg har misforstått bruken, jeg sa at:

Dim frm as New frmPopup
ShowWindow(frm.Handle, SW_SHOWNOACTIVATE)

 

 

Fant en greie på det: http://vbnet.mvps.org/index.html?code/faq/activatewin.htm

5830436[/snapback]

Ja, det var faktisk fra den jeg hentet verdiene for konstantene. ;)

 

Det kan jo se ut som jeg gjør riktig iallfall...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...