WindowState - Form minimiert starten

09/11/2008 - 11:39 von Thomas Hübner | Report spam
Hi NG,

ich habe eine Anwendung die auf Userwunsch (setting) minimiert im tray
Starten soll.

Folgendes mache ich im form_Load:

Me.Visible = False
Main.Setup = New Settings

If Main.Setup.minimizeToTray Then
TrayIcon.Icon = Me.Icon
Me.ShowInTaskbar = False
Else
Me.ShowInTaskbar = True
End If

If Main.Setup.startMinimized Then
Me.WindowState = FormWindowState.Minimized
Me.Left = Main.Setup.formLeft
Me.Height = Main.Setup.formHeight
Me.Top = Main.Setup.formTop
Me.Width = Main.Setup.formWidth
Else
Me.WindowState = FormWindowState.Normal
Me.Left = Main.Setup.formLeft
Me.Height = Main.Setup.formHeight
Me.Top = Main.Setup.formTop
Me.Width = Main.Setup.formWidth
Split.SplitterDistance = Main.Setup.splitterDistance
Split2.SplitterDistance = Main.Setup.splitter2Distance
End If

Hier folgt dann weiterer code unter anderem auch Me.Visible = True
(nicht das da jemand stolpert ;-). Das habe ich nur um das "aufpoppen"
zu unterbinden.

Das funktioniert auch soweit außer das wenn ich minimiert in Tray starte
immer die Kopfzeile der Form mit control box _auf_ die Taskleiste
gelegt wird (nicht in die Taskleiste rein sondern oben drauf in der
Linken Ecke) Wenn ich dort nun das Fenster öffne und anschließend die
geöffnete Form wieder minimiere verschwindet Sie ordnungsgemàß. Habe ich
da irgendwie ein Brett vorm Kopf? NET2.0

Gruß,
Thomas
 

Lesen sie die antworten

#1 Thorsten Doerfler
09/11/2008 - 12:08 | Warnen spam
Thomas Hübner schrieb:

Das funktioniert auch soweit außer das wenn ich minimiert in Tray starte
immer die Kopfzeile der Form mit control box _auf_ die Taskleiste
gelegt wird (nicht in die Taskleiste rein sondern oben drauf in der
Linken Ecke) Wenn ich dort nun das Fenster öffne und anschließend die
geöffnete Form wieder minimiere verschwindet Sie ordnungsgemàß.



Wenn ein Formular nicht in der Taskleiste erscheinen soll, wird es als
Box auf dem Desktop abgelegt, wenn es minimiert wurde. Statt die
ShowInTaskBar-Eigenschaft zu manipulieren, solltest Du Dein Formular
einfach ausblenden, wenn es nur im Infobereich angezeigt werden soll.

Das wirst Du wahrscheinlich auch im Resize-Ereignis entsprechend machen.
Nur funkt Dir der Standard ApplicationContext dazwischen, der das
Anzeigen des Formulars erzwingt.

' Anwendungsframework muss in den Projekt Eigenschaften deaktiviert
' sein und das Projekt muss über Sub Main gestartet werden:
Public Class Form1
Private Sub NotifyIcon1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles NotifyIcon1.Click
Me.Close()
End Sub
End Class

Public Module Main
Public Sub Main()
Dim lAppContext As New HiddenApplicationContext(New Form1)
Application.Run(lAppContext)
End Sub
End Module

Public Class HiddenApplicationContext
Inherits ApplicationContext

Private m_MainForm As Form

Protected Overrides Sub Dispose(ByVal disposing As Boolean)
MyBase.Dispose(disposing)
If disposing And Not Me.m_MainForm Is Nothing Then
If Not Me.m_MainForm.IsDisposed Then
Me.MainForm.Dispose()
End If
Me.m_MainForm = Nothing
End If
End Sub

Public Sub New(ByVal mainForm As Form)
MyBase.New()

Dim lHandle As IntPtr
Me.m_MainForm = mainForm
lHandle = Me.m_MainForm.Handle ' erstellt das unsichtbare Formular

AddHandler m_MainForm.FormClosed, AddressOf Me.OnFormClosed
End Sub

Protected Sub OnFormClosed(ByVal sender As Object, _
ByVal e As FormClosedEventArgs)
Me.ExitThreadCore()
End Sub
End Class

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen