Hallo zusammen,
vielleicht ist es ein Bug, vielleicht verstehe ich auch einfach das Prinzip nicht. Eigentlich ist mein Problem, dass ich eine Software schreibe, die eine Art Präsentation erstellt, die mit einem Beamer projeziert werden kann. Wegen der bekannten Probleme mit verschiedenen Auflösungen sieht die Projektion so aus wie bei Power Point, mit links und rechts schwarzen Balken und die eigentliche Präsi in 4:3 Format. Dazu habe ich bei der Entwicklung einfach ein bildschirmfüllendes schwarzes Form hinter die 4:3 Präsiform gelegt. Eigentlich alles super, nur beim tabben durch die geöffneten Programme mit ALT+TAB taucht das Hintergrundform extra auf, wodurch man entweder nur den schwarzen Bildschirm sehen kann oder die Präsi ohne Hintergrund. Um Hintergund und Präsi jetzt in eine Form zu bringen wollte ich die Elemente der Präsi in ein Panel setzen, hatte da aber Probleme mit der Paint Methode und habe daher untenstehende Test-App. geschrieben. Daraus ergeben sich jetzt eine Frage und ein möglicher Bug:
Frage: Wie kriege ich es hin, dass beim transparenten Label l1 die Hintergrundfarbe dem gemalten Rechteck entspricht, welches zwischen Panel und Label liegt? l2 ist Teil der Form und zeigt das gemalte Rechteck im HG an, warum funktioniert das nicht mit l1?
Bug: Wenn l2 (obwohl außerhalb des Panels und des dort gemalten Rechtecks) eine andere HG-Farbe als transparent bekommt, wird das Rechteck IM Panel nicht mehr gemalt. Ist das ein Bug oder ist da eine höhere Logik dahinter?
Vielen Dank für die Hilfe
Florian
Public
Class Class1
Inherits System.Windows.Forms.Form
Dim p As Panel = New Panel
Private Sub Class1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.BackColor = Color.LightGreen
Me.ClientSize = New Size(500, 500)
With p
.Location = New Point(100, 100)
.Size = New Size(300, 300)
.BackColor = Color.Red
End With
Me.Controls.Add(p)
Dim l1 As Label = New Label
With l1
.BackColor = Color.Transparent
.Text = "Test"
.Location =
New Point(100, 100)
End With
p.Controls.Add(l1)
Dim l2 As Label = New Label
With l2
.BackColor = Color.Transparent
.Text = "Test"
.Location =
New Point(50, 50)
.Size =
New Size(30, 20)
End With
Me.Controls.Add(l2)
End Sub
Private Sub Class1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles_ Me.Paint
Dim g As Graphics = p.CreateGraphics
g.FillRectangle(Brushes.LightYellow, 50, 50, 200, 200)
e.Graphics.FillRectangle(Brushes.LightSalmon, 0, 0, 150, 150)
End Sub
End Class