| |

VB.NET - FortgeschritteneGrafik, Paint, Refresh, einfach alles ... | |  | Autor: MikaDoProxx | Datum: 14.02.04 15:28 |
| Hallo.
Ich wollte jetzt einmal mein Programm ein bisschen mit Grafik-Sachen "verschönern".
Dafür habe ich jetzt mal ein kleines Beispiel vorbereitet, da das "echte" Listing 13'532 Zeilen umfassen würde.
Folgendes soll eigentlich geschehen:
In eine PictureBox werden zwei schwarze Linien gezeichnet.
Erfält die erste TextBox den Focus, so soll die erste Linie rot gezeichnet werden und die zweite schwarz.
Erfält die zweite TextBox den Focus, so soll die zweite Linie rot gezeichnet werden und die erste schwarz.
Hier ist das Listing des Beispielformulars:
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Vom Windows Form Designer generierter Code "
Public Sub New()
MyBase.New()
' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
InitializeComponent()
' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen
End Sub
' Die Form überschreibt den Löschvorgang der Basisklasse, um Komponenten zu
' bereinigen.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
' Für Windows Form-Designer erforderlich
Private components As System.ComponentModel.IContainer
'HINWEIS: Die folgende Prozedur ist für den Windows Form-Designer
' erforderlich
'Sie kann mit dem Windows Form-Designer modifiziert werden.
'Verwenden Sie nicht den Code-Editor zur Bearbeitung.
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.TextBox2 = New System.Windows.Forms.TextBox
Me.PictureBox1 = New System.Windows.Forms.PictureBox
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(16, 16)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.TabIndex = 0
Me.TextBox1.Text = "TextBox1"
'
'TextBox2
'
Me.TextBox2.Location = New System.Drawing.Point(16, 40)
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.TabIndex = 1
Me.TextBox2.Text = "TextBox2"
'
'PictureBox1
'
Me.PictureBox1.Location = New System.Drawing.Point(128, 16)
Me.PictureBox1.Name = "PictureBox1"
Me.PictureBox1.Size = New System.Drawing.Size(100, 100)
Me.PictureBox1.TabIndex = 3
Me.PictureBox1.TabStop = False
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(248, 134)
Me.Controls.Add(Me.PictureBox1)
Me.Controls.Add(Me.TextBox2)
Me.Controls.Add(Me.TextBox1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
Dim gr As Graphics = e.Graphics
Dim ps As New Pen(Color.Black, 2)
Dim pr As New Pen(Color.Red, 2)
Dim P1 As New Point(0, 0)
Dim P2 As New Point(0, 100)
Dim P3 As New Point(100, 0)
Dim P4 As New Point(100, 100)
gr.DrawLines(ps, New Point() {P1, P2})
gr.DrawLines(ps, New Point() {P3, P4})
If (Me.TextBox1.Focus = True) Then
gr.DrawLines(pr, New Point() {P1, P2})
ElseIf (Me.TextBox2.Focus = True) Then
gr.DrawLines(pr, New Point() {P3, P4})
End If
End Sub
Private Sub TextBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles TextBox1.Enter, TextBox2.Enter
sender.SelectAll()
Me.PictureBox1.Refresh()
End Sub
Private Sub TextBox_Leave(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles TextBox1.Leave, TextBox2.Leave
Me.PictureBox1.Refresh()
End Sub
End Class Nun tritt aber folgender Fehler auf:
Sobald die Zeile mit dem Inhalt "Me.PictureBox1.Refresh()" erreicht ist, wird scheinbar das komplette Formular neu geladen.
Wenn ich jetzt von der TextBox1 in die TextBox zwei entere, geht es bis zur besagten Zeile und dann wird automatisch wieder die Konfiguration geladen, wie sie beim ersten Laden geladen wurde.
Meine Frage nun: Wie bekomme ich es hin, dass das Programm so funktioniert, wie ganz oben beschrieben?
Gruß Mika 0 |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevPopUp 2.0 
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|