Hallo Leute,
Ich möchte auf einem SCROLLBAREN Panel mehrere Steuerelemente zur Laufzeit einfügen.
Das Ziel: Ein riesiges Panel, auf dem ich Scrollen kann und Steuerelemente einfügen kann.
Das Problem: Mouseposition liefert mir immer den gleichen Wert nach dem Scrollen.
Ich möchte aber die Position der Maus auf dem Panel erhalten.
Habe als Test folgenden Code zusammengestoppelt:
Imports System.Drawing.Graphics
Imports System.Drawing
Imports Microsoft.VisualBasic
Public Class Form1
Dim RasterStattPunkte As Boolean = False
Dim Rastermass As Integer = 20
Sub ZeichneRaster(ByVal e As PaintEventArgs) 'Erneuert den Raster
Dim RasterGrafik As Graphics = e.Graphics
Dim Farbe As New System.Drawing.Pen(System.Drawing.Color.Bisque)
Dim Punkt As New Point
If RasterStattPunkte = True Then
For i = 0 To MyPanel1.Width Step Rastermass
RasterGrafik.DrawLine(Farbe, i, 0, i, MyPanel1.Height) _
'x1,y1,x2,y2
Next i
For i = 0 To MyPanel1.Height Step Rastermass
RasterGrafik.DrawLine(Farbe, 0, i, MyPanel1.Width, i) _
'x1,y1,x2,y2
Next i
Else
For i = 0 To MyPanel1.Width Step Rastermass
For r = 0 To MyPanel1.Height Step Rastermass
Punkt.X = i
Punkt.Y = r
RasterGrafik.DrawEllipse(Farbe, Punkt.X, Punkt.Y, 1, 1)
Next r
Next i
End If
End Sub
Private Sub MyPanel1_MouseDown(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles MyPanel1.MouseDown
MsgBox(Panel.MousePosition.ToString)
End Sub
Private Sub Panel_Paint(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyPanel1.Paint
ZeichneRaster(e)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
With MyPanel1
.AllowDrop = True
.AutoScroll = True
.AutoSize = True
.AutoScrollMinSize = New Size(1, 2)
.Size = New Size(10000, 10000)
.Location = New Point(0, 0)
.BackColor = Color.Black
' .Dock = DockStyle.Fill '--> Wenn Dockstyle = Fill _
funktioniert der Scroll nicht mehr
End With
End Sub
End Class
Public Class MyPanel
Inherits Panel
Public Sub New()
Me.SetStyle(ControlStyles.DoubleBuffer Or ControlStyles.UserPaint Or _
ControlStyles.AllPaintingInWmPaint, True)
End Sub
End Class
Beitrag wurde zuletzt am 29.05.13 um 09:39:19 editiert. |