hallo,
durch hilfe aus dem internet und hier im forum, hab ich diesen code gebastelt, der ein fenster immer ganz unten auf dem desktop halten soll.
wenn ich in meinem programm nur eine form platziere ist diese automatisch unten (unterstes aller fenster).
ruft mein programm jedoch mehrere dieser forms auf, liegen diese über allen fenstern und lassen sich erst durch ein anklicken nach unten bringen.
frage:
wie muss ich den code verändern, um 1-x fenster immer sofort unten zu haben.
hier nun der code von myform.vb
Public Class myForm
Inherits System.Windows.Forms.Form
Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As _
IntPtr, ByVal hWndInsertAfter As Int32, ByVal x As Int32, ByVal y As _
Int32, ByVal cx As Int32, ByVal cy As Int32, ByVal wFlags As Int32) As _
Int32
Private Const SWP_NOMOVE As Int32 = &H2
Private Const SWP_NOSIZE As Int32 = &H1
Private Const HWND_TOPMOST = -1 'bringt ein fenster an die oberste
' stelle
Private Const HWND_NOTOPMOST = -2 'bringt ein fenster an die unterste
' stelle eines containers
Private Const HWND_BOTTOM = 1 'bringt ein fenster an die unterste
' position aller fenster
Private Const WS_EX_TOOLWINDOW As Int32 = &H80
Private Const WS_EX_APPWINDOW As Int32 = &H40000
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = (cp.ExStyle Or CType(WS_EX_TOOLWINDOW, Integer))
cp.ExStyle = (cp.ExStyle - CType(WS_EX_APPWINDOW, Integer))
Return cp
End Get
End Property
Private Sub InitializeComponent()
Me.SuspendLayout()
Me.ClientSize = New System.Drawing.Size(300, 300)
Me.Name = "myForm"
Me.ResumeLayout(False)
End Sub
Private Sub myForm_Load(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles Me.Load
'diese einstellungen sind zwingend notwendig
'this settings are nessesary
Me.ShowIcon = True
Me.ShowInTaskbar = True
Me.Text = Nothing
End Sub
Private Sub myForm_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
SetWindowPos(Me.Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE Or _
SWP_NOSIZE)
End Sub
Private Sub myForm_Paint(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles Me.Paint
SetWindowPos(Me.Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE Or _
SWP_NOSIZE)
End Sub
End Class und so werden die fenster inizialisiert
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
....
For i As Integer = 0 To x
myForms.Add(New myForm)
myShadows(i).FormBorderStyle = Windows.Forms.FormBorderStyle.None
...
myForms(i).StartPosition = FormStartPosition.Manual
myForms(i).Location = Location
myForms(i).Size = Size
myShadows(i).StartPosition = FormStartPosition.Manual
myShadows(i).Location = Location
myShadows(i).Size = Size
Next i
...
End Sub und irgendwann zum anzeigen
myForms(i).Show()
myShadows(i).Show(myForms(i)) danke
mikeb69 |