vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Mehrere Controls auf Form Markieren und Verschieben 
Autor: TimZwingmann
Datum: 28.11.17 09:32

Hallo,

wie ist es möglich einen Bereich auf einer Form in VB.net mittels Maus zu markieren und die darin befindenden Controls zu "Markieren" und verschieben.
Selbe Funktion wie auf dem Desktop

Mit freundlichen Grüßen

Beitrag wurde zuletzt am 28.11.17 um 09:34:01 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere Controls auf Form Markieren und Verschieben 
Autor: Manfred X
Datum: 28.11.17 11:42

Hallo!

Wie soll markiert werden?
Mit der Maus ein Rechteck auf der Form zeichnen und die darin
befindlichen Controls gemeinsam um einen Betrag X/Y auf der
Form verschieben?
Was geschieht, wenn das Ziel-Rechteck nicht vollständig auf die
Form passt? Löschen der Controls im überstehenden Bereich?
Oder neu einapssen/anordnen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere Controls auf Form Markieren und Verschieben 
Autor: TimZwingmann
Datum: 28.11.17 11:53

Danke für die schnelle Antwort!

Ja es soll sozusagen ein Rechteck gezeichnet werden und die darin befindlichen Controls
so verschieben wie man die Maus bewegt.

Public Class Form1
 
    Private firstklick As Boolean = False
    Private verschieben As Boolean = False
    Private strg As Boolean = False
    Private pn As Panel
    Private oldx As Integer
    Private oldy As Integer
    Private xm As Integer
    Private ym As Integer
 
    Private clist As List(Of Control) = New List(Of Control)
 
 
    Private Sub StartToolStripMenuItem1_Click(sender As Object, e As EventArgs) _
      Handles StartToolStripMenuItem1.Click
        strg = True
    End Sub
 
    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles _
      Me.MouseDown
        If Not strg Then Return
        If clist.Count > 0 Then
            For Each c As Control In clist
                Highlighter1.SetHighlightColor(c, _
                  DevComponents.DotNetBar.Validator.eHighlightColor.None)
            Next
        End If
        clist.Clear()
        xm = e.X
        ym = e.Y
        pn = New Panel
        With pn
            .Location = New Point(xm, ym)
            .BorderStyle = BorderStyle.FixedSingle
        End With
        oldx = xm
        oldy = ym
        firstklick = True
    End Sub
 
    Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles _
      Me.MouseMove
        If firstklick Then
            xm = e.X
            ym = e.Y
            With pn
                .Size = New Size(xm - oldx, ym - oldy)
                .Visible = True
            End With
            Controls.Add(pn)
        End If
    End Sub
 
    Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles _
      Me.MouseUp
        If Not strg Then Return
        For Each c As Control In Controls
            If TypeOf c IsNot Panel Then
                If c.Location.X > oldx And c.Location.Y > oldy AndAlso _
                  c.Location.X < xm And c.Location.Y < ym Then
                    clist.Add(c)
                End If
            End If
        Next
 
        For Each c As Control In clist
            Highlighter1.SetHighlightColor(c, _
              DevComponents.DotNetBar.Validator.eHighlightColor.Blue)
        Next
        firstklick = False
        strg = False
        Me.Controls.Remove(pn)
 
    End Sub
 
 
    Private Sub MoseDwonAll(sender As Object, e As MouseEventArgs) Handles _
      TextBox2.MouseDown, TextBox1.MouseDown, Label2.MouseDown, _
      Label1.MouseDown, Button2.MouseDown, Button1.MouseDown
        verschieben = True
    End Sub
 
    Private Sub MouseMoveAll(sender As Object, e As MouseEventArgs) Handles _
      TextBox2.MouseMove, TextBox1.MouseMove, Label2.MouseMove, _
      Label1.MouseMove, Button2.MouseMove, Button1.MouseMove
        If Not verschieben Then Return
 
    End Sub
 
 
    Private Sub MouseUpAll(sender As Object, e As MouseEventArgs) Handles _
      TextBox2.MouseUp, TextBox1.MouseUp, Label2.MouseUp, Label1.MouseUp, _
      Button2.MouseUp, Button1.MouseUp
        verschieben = False
    End Sub
So sieht mein Code derzeit aus, ich zeichne mithilfe meiner Maus ein Panel. Und die Controls die sich eben in diesem Panel Befinden sollen einen Highlighter bekommen damit es erkenntlich wird.

Diese Controls werden in eine Liste gespeichert damit man auf sie zugreifen kann.

Nun ist meine Frage wie ich alle Controls verschieben kann, aber die proportionen also die Abstände zwischen den Controls beibehalten kann
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere Controls auf Form Markieren und Verschieben 
Autor: Manfred X
Datum: 28.11.17 13:17

End ClassDevComponents besitze ich nicht!
Hier ein Winforms-Beispiel:
Public Class frmMove
 
    Dim Moveables As New List(Of Control)
 
    Private Sub FillMoveable()
 
        Dim cWidth As Integer = 60, cheight As Integer = 30
        For i As Integer = 1 To 5
            For k As Integer = 1 To 5
                Moveables.Add(New Button With _
                {.Left = (i - 1) * CInt(1.2 * cWidth), _
                 .Top = (k - 1) * CInt(1.2 * cheight), _
                 .Width = cWidth, .Height = cheight, _
                 .Text = i.ToString + k.ToString,
                 .Parent = Me})
                AddHandler Moveables(Moveables.Count - 1).MouseDown, _
                    AddressOf moveable_mousedown
                AddHandler Moveables(Moveables.Count - 1).MouseUp, _
                                   AddressOf moveable_mouseup
            Next k
        Next i
    End Sub
 
    Private Sub moveable_mousedown(sender As Object, e As MouseEventArgs)
        If e.Button = Windows.Forms.MouseButtons.Right Then
            xmove = e.X : ymove = e.Y
        End If
    End Sub
 
    Private Sub moveable_mouseup(sender As Object, e As MouseEventArgs)
        If e.Button = Windows.Forms.MouseButtons.Right Then
           moveit(e.X - xmove, e.Y - ymove)
           xmove = -1 : ymove = -1
        End If
    End Sub
 
    Private Sub frmMove_Load(sender As System.Object, _
                             e As System.EventArgs) Handles MyBase.Load
        FillMoveable()
    End Sub
 
    Dim xmark% = -1, ymark% = -1, mark_rect As Rectangle
    Dim mark_color As Color = Me.BackColor
    Dim xmove% = -1, ymove% = -1
 
    Private Sub frmMove_MouseDown(sender As Object, _
        e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
 
        If e.Button = Windows.Forms.MouseButtons.Left Then
            xmark = e.X : ymark = e.Y : mark_color = Color.Red
        ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
            xmove = e.X : ymove = e.Y
        End If
    End Sub
 
 
    Private Sub frmMove_MouseMove(sender As Object, _
        e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
 
        If e.Button = Windows.Forms.MouseButtons.Left Then
            Dim w, h, t, l As Integer
            w = Math.Abs(xmark - e.X)
            h = Math.Abs(ymark - e.Y)
            l = Math.Min(xmark, e.X)
            t = Math.Min(ymark, e.Y)
 
            mark_rect = New Rectangle(l, t, w, h)
 
            If xmark >= 0 Then
                Me.Invalidate()
                Mark_Moveables()
            End If
        End If
    End Sub
 
 
    Private Sub Mark_Moveables()
        For i As Integer = 0 To Moveables.Count - 1
            Dim control_rect As New Rectangle(Moveables(i).Location, Moveables( _
              i).Size)
            Dim r As Rectangle = Rectangle.Intersect(control_rect, mark_rect)
            If Not (r.Width = 0 Or r.Height = 0) Then
                If Moveables(i).Tag Is Nothing Then
                    Moveables(i).Tag = Moveables(i).BackColor
                    Moveables(i).BackColor = Color.Blue
                End If
            ElseIf Moveables(i).Tag IsNot Nothing Then
                Moveables(i).BackColor = DirectCast(Moveables(i).Tag, Color)
                Moveables(i).Tag = Nothing
            End If
        Next i
    End Sub
 
    Private Sub moveit(dx As Integer, dy As Integer)
        For i As Integer = 0 To Moveables.Count - 1
            If Moveables(i).Tag IsNot Nothing Then
                Moveables(i).Top += dy
                Moveables(i).Left += dx
            End If
        Next i
        Mark_Moveables()
    End Sub
 
    Private Sub frmMove_MouseUp(sender As Object, _
                                e As System.Windows.Forms.MouseEventArgs) _
                                Handles Me.MouseUp
        If e.Button = Windows.Forms.MouseButtons.Left Then
            mark_color = Me.BackColor
            xmark = -1 : ymark = -1 : mark_rect = Nothing
            Me.Invalidate()
        ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
            moveit(e.X - xmove, e.Y - ymove)
            xmove = -1 : ymove = -1
        End If
    End Sub
 
 
    Private Sub frmMove_Paint(sender As Object, _
        e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
 
        If xmark > 0 Then
            Using p As New Pen(mark_color)
                e.Graphics.DrawRectangle(p, mark_rect)
            End Using
        End If
    End Sub


Beitrag wurde zuletzt am 28.11.17 um 13:24:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mehrere Controls auf Form Markieren und Verschieben 
Autor: TimZwingmann
Datum: 28.11.17 13:26

Vielen Dank!

Das ist genau dass was ich brauche!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel