vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2018
 
zurück
Rubrik: Oberfläche · Fenster   |   VB-Versionen: VB200830.10.08
Ist eine Form das aktive Fenster? (Extension Method VB.NET 2008)

Erweitert die Klasse Windows.Forms.Form um eine Methode IsMeForeGroundWindow.

Autor:   Andreas HuhnBewertung:     [ Jetzt bewerten ]Views:  10.915 
www.andreashuhn.deSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Dieser Tipp ist hat zwei praktische Elemente:

  1. Erweiterung der Klasse Form um eine Methode, die als Rückgabewert angibt, ob die Instanz gerade das aktive Fenster im Vordergrund ist oder nicht
     
  2. Exemplarische Veranschaulichung des Konzepts der Extension Methods, die mit Visual Studio 2008 eingeführt wurden.

Extension Methods müssen in VB.NET in Modulen abgelegt werden. Wir erstellen also ein Modul mod_Extension_Form und ergänzen folgenden Code:

 
Module mod_Extension_Form
  ' API-Funktion, um das Fenster-Handle des Fensters im 
  ' Vordergrund zu bestimmen
  Private Declare Function GetForegroundWindow Lib "user32" _
    Alias "GetForegroundWindow" () As IntPtr
 
  Private Function GetFGWindowHandle() As IntPtr
    Dim fg_hwnd As IntPtr = GetForegroundWindow()
    Return fg_hwnd
  End Function
 
  ' Deklaration der Extension-Method durch Attribut und Funktions-Kopf
  ' Bei Extension-Methods gibt der Datentyp des ersten Parameters in der 
  ' Liste an, welche Klasse erweitert werden soll. 
  ' (Hier die Klasse Windows.Forms.Form)
  <System.Runtime.CompilerServices.Extension()> _
  Friend Function IsMeForeGroundWindow(ByVal f As Form) As Boolean
    ' Auswertung ob das Handle des aktiven Fensters gleich dem des 
    ' eigenen Fensters ist
    ' (--> Das eigene Fenster ist im Vordergrund)
    Return Not CBool(f.Handle.ToInt32 Xor GetFGWindowHandle().ToInt32)
  End Function
End Module

Nun testen wir die Methode und bereiten die Form so auf, dass man den Wechsel der beiden Zustände schön beobachten kann.

Wir fügen folgende Steuerelemente zu Form1 hinzu:

  • TextBox1 --> TextBox
  • Timer1 --> Timer

Wir ergänzen den Code von Form1 wie folgt:

Public Class Form1
  Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
 
    ' Unser Fenster wird immer angezeigt
    Me.TopMost = True
 
    ' Wir starten den Timer
    Timer1.Enabled = True
  End Sub
 
  Private Sub Timer1_Tick(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Timer1.Tick
 
    ' Wir schreiben in die TextBox, ob unser Fenster das 
    ' ForeGroundWindow ist (Ausgabe True)
    ' oder nicht (Ausgabe False)
    TextBox1.Text = Me.IsMeForeGroundWindow.ToString
  End Sub
End Class

Nun haben wir unsere erste Extension Method fertig gestellt und auf ihre Praxis-Tauglichkeit getestet.

Dieser Tipp wurde bereits 10.915 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2018 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel