2009-03-16 6 views
0

Ich erstelle eine Kiosk-Anwendung. Ich habe es Vollbild- und Ich zeichne direkt auf dem Formular:Frage zu Bildern und Winforms

Private Function CreateHeader(ByVal headerText As String) As Boolean 
    Try 
     Dim oGFX As Graphics = Graphics.FromHwnd(hwnd:=_oP.Handle) 
     Dim oRect As Rectangle = New Rectangle(x:=0, y:=0, Width:=_screenSize.X, Height:=150) 
     Dim oBMP As New Bitmap(GetEmbeddedResourceStream("Kiosk.logo.jpg")) 

     Dim oBrush As Brush = New SolidBrush(Color.FromArgb(red:=0, green:=0, blue:=153)) 


     oGFX.FillRectangle(brush:=oBrush, rect:=oRect) 
     oGFX.DrawImage(image:=oBMP, _ 
          x:=0, _ 
          y:=0, _ 
         width:=oBMP.Width, _ 
         height:=oBMP.Height) 

     If Not String.IsNullOrEmpty(headerText) Then 
      Dim oFont As New Font("Impact", 48, FontStyle.Regular) 
      Dim g As Graphics = Me.CreateGraphics() 

      Dim oStringSize As SizeF = g.MeasureString(headerText, oFont) 

      g = Nothing 

      oGFX.DrawString(s:=headerText, _ 
         font:=oFont, _ 
         brush:=Brushes.White, _ 
          x:=(oRect.Width - Math.Round(oStringSize.Width, 0))/2, _ 
          y:=(oRect.Height - Math.Round(oStringSize.Height, 0))/2) 
     End If 

     Return True 
    Catch ex As Exception 
     Return False 
    End Try 
End Function 

Alles zieht in Ordnung, aber die zweit Ich drücke Alt oder Tab (einzeln oder zusammen in beliebiger Reihenfolge) das Rechteck I schwindet zog. Wenn ich die Funktion erneut aufrufen, wird es neu gezeichnet und bleibt egal, welche Taste ich drücke. Gibt es irgendeine Art von .NET-Funktion, die ich aufrufen muss, damit meine Zeichenfunktion nur einmal aufgerufen werden muss?

Danke.

Antwort

2

Sie sollten Ihre Malerei tun, indem Sie OnPaint überschreiben - dann können Sie nach Bedarf neu streichen. Im Moment ist alles, was Sie zeichnen, nur gültig unter dem Bildschirm ist ungültig.

+0

OK, ich habe die Methode in den Override verschoben. Wie sollte ich die HeaderText Variable übergeben? Globale Variable? – Anders

+0

Ich bekomme immer noch das gleiche Verhalten, ich denke, ich werde einfach mit meinem ursprünglichen Plan gehen und Paneele erstellen, anstatt Rechtecke zu zeichnen. Ich werde am Ende mehr Kontrolle über die endgültige Implementierung auf diese Weise haben. Danke für Ihre Hilfe. – Anders

+0

Sorry, ich war woanders - ja, es sollte mit einer Textvariablen arbeiten. Sehr überrascht, dass es nicht funktioniert hat; es sollte! –