GDI+

03/04/2009 - 16:20 von Harald Bacik | Report spam
Hallo

Ich spiele mich gerade mit GDI+ & VB2008 herum.
Ich möchte beim Klick auf einen Button ein Viereck in eine Textbox
zeichnen. - Tja, leider geht das nicht...
Ich habe jetzt herausgefunden, dass das Viereck schon gezeichnet wird, aber
die Textbox im Z-Order einfach über dem gezeichneten steht. - Wie bringe ich
aber die Zeichnung in den Vordergrund?
Hier ein bsp. -Code
Private Sub UiButton1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles UiButton1.Click
Dim sz As New Size(EditBox2.Width + 2, EditBox2.Height + 2)
Dim rect As New Rectangle(EditBox2.Location, sz)
Dim myPen As New Pen(Color.Black)
Dim myGraphic As Graphics
myGraphic = Me.CreateGraphics
myGraphic.DrawRectangle(myPen, rect)
End Sub

Danke schon im Voraus
 

Lesen sie die antworten

#1 Peter Götz
03/04/2009 - 20:53 | Warnen spam
Hallo Harald,

Ich spiele mich gerade mit GDI+ & VB2008 herum.
Ich möchte beim Klick auf einen Button ein Viereck
in eine Textbox zeichnen. - Tja, leider geht das nicht...



Geht schon.

Ich habe jetzt herausgefunden, dass das Viereck schon
gezeichnet wird, aber die Textbox im Z-Order einfach
über dem gezeichneten steht. - Wie bringe ich
aber die Zeichnung in den Vordergrund?



Gar nicht,
Du musst direkt in die Textbox zeichnen.

Hier ein bsp. -Code
Private Sub UiButton1_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles UiButton1.Click
Dim sz As New Size(EditBox2.Width + 2, EditBox2.Height + 2)
Dim rect As New Rectangle(EditBox2.Location, sz)
Dim myPen As New Pen(Color.Black)
Dim myGraphic As Graphics
myGraphic = Me.CreateGraphics



Nicht
Me.CreateGraphics

sondern
Textbox.CreateGraphics

myGraphic.DrawRectangle(myPen, rect)
End Sub

Danke schon im Voraus



Hier mal ein Beispiel das bei jedem Button-Klick
in der Textbox ein rotes Rechteck zeichnet bzw.
dieses wieder löscht.

' /// Code in einem leeren Formmodul (Form1)
Public Class Form1
Private WithEvents TBox As TextBox
Private WithEvents Btn As Button
Private mShowRect As Boolean
Private WithEvents mTimer As Windows.Forms.Timer

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

mTimer = New Windows.Forms.Timer

TBox = New TextBox
With TBox
.Font = New Font("Arial", 14)

.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
.Height)

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right

.Name = "TBox"
.Text = .Name
End With
Me.Controls.Add(TBox)

Btn = New Button
With Btn
.SetBounds _
(Me.ClientSize.Width - 100, _
TBox.Bottom + 20, _
90, 40)

.Text = "Click Me"

.Font = New Font("Arial", 10)

.Anchor = _
AnchorStyles.Top Or _
AnchorStyles.Right

End With
Me.Controls.Add(Btn)

Me.ClientSize = _
New Size(300, Btn.Bottom + 10)
End Sub

Private Sub Form1_FormClosing _
(ByVal sender As Object, _
ByVal e As FormClosingEventArgs _
) Handles Me.FormClosing
If mTimer IsNot Nothing Then
mTimer.Stop()
mTimer.Dispose()
End If
End Sub

Private Sub Btn_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Btn.Click

mShowRect = Not mShowRect
Me.Text = mShowRect.ToString
DoPaint()
End Sub

Private Sub TBox_Paint _
(ByVal sender As Object, _
ByVal e As PaintEventArgs _
) Handles TBox.Paint

Dim R As New Rectangle
Dim P As Pen
With e.ClipRectangle
R.X = .X + 2
R.Y = .Y + 2
R.Width = .Width - 4
R.Height = .Height - 4
End With
If mShowRect Then
P = New Pen(Color.Red, 2)
Else
P = New Pen(TBox.BackColor, 2)
End If

e.Graphics.DrawRectangle(P, R)
End Sub


Private Sub Form1_Paint _
(ByVal sender As Object, _
ByVal e As PaintEventArgs _
) Handles Me.Paint

DoPaint()
End Sub

Private Sub TBox_Event _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles _
TBox.Enter, _
TBox.Leave, _
TBox.TextChanged

DoPaint()
End Sub


Private Sub DoPaint()
mTimer.Interval = 10
mTimer.Start()
End Sub


Private Sub mTimer_Tick _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mTimer.Tick

mTimer.Stop()

Dim PEA As New PaintEventArgs _
(TBox.CreateGraphics, _
TBox.ClientRectangle)

TBox_Paint(TBox, PEA)
PEA.Dispose()
End Sub

End Class
' \\\ E N T E

Nach dem Programmstart auf den Button klicken
und klicken und klicken usw

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen