vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 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 - Ein- und Umsteiger
Grafiken aufeinander positonieren 
Autor: Sebi90
Datum: 07.03.18 19:11

Hallo User,

leider weis ich nicht ob folgendes mit VB.net funktioniert. Darum zum Anfang mal eine Grafik.



Ich möchte die roten Rechtecke in das schwarze Rechteck schieben. (Drag and Drop) Diese sollen sich aber darin nicht überschneiden. Bzw. gibt es eine Möglichkeit Einrastpunkte zu definieren ?

Leider weis ich nicht wie ich es besser Beschreiben sollte. Ich hoffe Ihr wisst was ich meine.

Geht sowas ? Könnte ich vielleicht ein kleine Beispiel haben ?

Grüsse
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grafiken aufeinander positonieren 
Autor: Kuno60
Datum: 07.03.18 22:01

Hallo,
natürlich kann man Grafiken per Maus verschieben und auch an bestimmten Positionen einrasten lassen.
Aber was meinst du mit "nicht überschneiden" und wo soll was einrasten?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grafiken aufeinander positonieren 
Autor: Sebi90
Datum: 07.03.18 22:04

Hi,

die roten Rechtecke sollen sich nicht überlappen.
Einrasten soll das ganze links und rechts ausgemittelt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grafiken aufeinander positonieren 
Autor: Kuno60
Datum: 07.03.18 22:14

Eine Möglichkeit wäre über Steuerelemente, die man aus einem Container in einen anderen Container zieht. Dafür eignet sich besonders das FlowLayoutPanel. Da werden die Steuerelemente automatisch angeordnet und können über Margin und Padding ausgerichtet werden. Überschneidungen sind da nicht möglich.
Oder willst du es rein Grafisch innerhalb eines Steuerelements (z.B. UserControl) machen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grafiken aufeinander positonieren 
Autor: Sebi90
Datum: 07.03.18 22:26

Leider weis ich nicht was ich will bzw was es gibt. Darum Frage ich ja nach.
Bin für alles dankbar.
Ein kleines Beispiel wäre halt super, das ich ein bisschen rumprobieren kann.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grafiken aufeinander positonieren 
Autor: Manfred X
Datum: 07.03.18 23:21

Hallo!

[I]Leider weiß ich nicht, was ich will ...[/I]

Das ist ein Problem, das im Forum nur mit Einschränkungen
behandelt werden kann.

Zunächst wäre zu klären, was diese Rechtecke eigentlich
sein sollen. Controls? Regions auf der Form?
Was soll verschoben werden? Controls oder Daten (Bitmaps)?
Falls Bitmaps ...
Sollen diese Graphiken auch nach der Verschiebung in das
Zielrechteck noch verschiebbar sein?
Sollen diese Graphiken in einer "Gesamtgraphik" fusioniert
werden?

Schildere Deine Zielsetzung. Was willst Du erreichen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grafiken aufeinander positonieren 
Autor: Sebi90
Datum: 08.03.18 05:59

Moin,

das ganze soll einen Schaltkasten darstellen (schwarzes Rechteck)
Die roten Rechtecke sollen Komponenten darstellen, die in den Schaltschrank kommen.
Leider kommt es sehr oft vor, das zu kleine Schaltschränke für die ganzen Komponenten bestellt werden.
Das ganze soll dazu dienen, das man das ganze mal im groben auf die schnelle darstellen kann.

Das ganze soll auch im Zielrechteck noch verschiebbar sein.
Bzw. das man das rote Rechteck ins schwarze zieht. Das rote soll aber außerhalb erhalten bleiben.
Es könnte ja sein das die gleiche rote Komponente mehrmals in den Schaltschrank muss.

Gesamtgraphik wäre fürs ausdrucken toll..
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grafiken aufeinander positonieren 
Autor: Manfred X
Datum: 08.03.18 16:32

Ziemlich umfangreiche Anforderung.
Hier nur ein einfaches Beispiel.

Public Class frmMoveControls
 
    Private Class cmp
        Implements ICloneable
 
        Public _bmp As Bitmap
        Public _typ As String
        Public _col As Color
        Public _location As New Point
 
        Public Sub New(bmp As Bitmap, typ As String)
            _bmp = bmp : _typ = typ
            _col = Color.Red
        End Sub
 
        Public Function Clone() As Object Implements ICloneable.Clone
            Return MemberwiseClone()
        End Function
    End Class
 
 
    Dim rasterheight As Integer = 50
    Dim markercolor As Color = Color.Green
 
    Dim cmps As New List(Of cmp) 'Komponenten
    Dim cmps_inst As New List(Of cmp) 'Installierte Komponenten
 
    Dim WithEvents compo_list As New PictureBox With
        {.Parent = Me, .Width = 200, .Height = 600, .Left = 220}
 
    'Schaltkasten für installierte Komponenten
    Dim WithEvents compo_box As New PictureBox With
        {.Parent = Me, .Width = 200, .Height = 600}
 
 
 
    Private Sub frmMovePics_Load(sender As Object,
                                 e As EventArgs) Handles MyBase.Load
 
        Me.Size = New Size(600, 700)
 
        For i As Integer = 0 To 5
            Dim cmp As New cmp(New Bitmap(150, rasterheight), "C_" & i.ToString)
            cmps.Add(cmp)
            cmp._location = New Point(10, i * (rasterheight + 10))
        Next i
    End Sub
 
 
    Private Sub pbox_Paint(sender As Object,
        e As PaintEventArgs) Handles compo_list.Paint, compo_box.Paint
        Dim lst As List(Of cmp)
        lst = cmps_inst
        If DirectCast(sender, PictureBox) Is compo_list Then lst = cmps
        PaintCmpList(lst, e.Graphics)
    End Sub
 
 
    Private Sub PaintCmpList(clist As List(Of cmp), gr As Graphics)
 
        gr.Clear(Color.White)
        For i As Integer = 0 To clist.Count - 1
            Using br As New SolidBrush(clist(i)._col),
                pn As New Drawing.Pen(br, 2),
                f As New Font("Arial", 10)
 
                gr.DrawRectangle _
                    (pn, New Rectangle(clist(i)._location, clist(i)._bmp.Size))
                Dim pt As Point = clist(i)._location
                pt.Offset(20, 20)
                gr.DrawString(clist(i)._typ, f, br, pt)
            End Using
        Next i
 
    End Sub
 
 
    Private Sub compo_list_MouseDown(sender As Object,
        e As MouseEventArgs) Handles compo_list.MouseDown
 
        For i As Integer = 0 To cmps.Count - 1
            Dim cr As New Rectangle(cmps(i)._location, cmps(i)._bmp.Size)
            If cr.Contains(New Point(e.X, e.Y)) Then
                'Wahl einer zu installierenden Komponente
                cmps(i)._col = markercolor
                cmps_inst.Add(DirectCast(cmps(i).Clone, cmp))
                Cursor = Cursors.Cross
            Else
                cmps(i)._col = Color.Red
            End If
        Next i
        PaintCmpList(cmps, compo_list.CreateGraphics)
 
    End Sub
 
 
    Private Sub compo_box_MouseMove(sender As Object,
        e As MouseEventArgs) Handles compo_box.MouseMove
 
        If CheckMarker() >= 0 Then
            If CheckTarget(New Point(e.X, e.Y)) Then
                Cursor = Cursors.Cross
            Else
                Cursor = Cursors.No
            End If
        Else
            Cursor = Cursors.Default
        End If
 
    End Sub
 
 
    Private Function CheckTarget(mouseposition As Point) As Boolean
        For i As Integer = 0 To cmps_inst.Count - 1
            Dim cr As New Rectangle(cmps_inst(i)._location, cmps_inst( _
              i)._bmp.Size)
            cr.Inflate(5, 5)
            If Not cmps_inst(i)._col = markercolor AndAlso
                (Cursor <> Cursors.Default And cr.Contains(mouseposition)) Then
                Return False
            End If
        Next i
        Return True
    End Function
 
 
    Private Function CheckMarker() As Integer
        For i As Integer = 0 To cmps.Count - 1
            If cmps(i)._col = markercolor Then Return i
        Next i
        Return -1
    End Function
Rest im zweiten Teil
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grafiken aufeinander positonieren (2.Teil) 
Autor: Manfred X
Datum: 08.03.18 16:34

Private Sub compo_box_MouseDown(sender As Object,
        e As MouseEventArgs) Handles compo_box.MouseDown
 
        If e.Button = MouseButtons.Left Then
            If Cursor = Cursors.No Then Exit Sub
 
            If Cursor = Cursors.Cross Then
                Dim posy As Integer = (e.Y \ rasterheight) * rasterheight
 
                For i As Integer = 0 To cmps_inst.Count - 1
                    If cmps_inst(i)._col = markercolor Then
                        'Installation der gewählten Komponente
                        cmps_inst(i)._location = New Point(10, posy + 10)
                        cmps_inst(i)._col = Color.Red
                        Cursor = Cursors.Default
                        PaintCmpList(cmps_inst, compo_box.CreateGraphics)
                    End If
                Next i
                Reset_cmps_color()
            End If
        ElseIf Cursor = Cursors.default Then
            'Löschen einer installierten Komponente
            Dim mp As Point = New Point(e.X, e.Y)
            For i As Integer = cmps_inst.Count - 1 To 0 Step -1
                Dim cr As New Rectangle(cmps_inst(i)._location, cmps_inst( _
                  i)._bmp.Size)
                If cr.Contains(mp) Then
                    cmps_inst.RemoveAt(i)
 
                    PaintCmpList(cmps_inst, compo_box.CreateGraphics)
                End If
            Next i
        End If
 
    End Sub
 
 
    Private Sub compo_box_MouseLeave(sender As Object,
        e As EventArgs) Handles compo_box.MouseLeave
 
        Cursor = Cursors.Default
        For i As Integer = cmps_inst.Count - 1 To 0 Step -1
            If cmps_inst(i)._col = markercolor Then cmps_inst.RemoveAt(i)
        Next i
        Reset_cmps_color()
    End Sub
 
 
    Private Sub Reset_cmps_color()
        For i As Integer = cmps.Count - 1 To 0 Step -1
            If cmps(i)._col = markercolor Then
                cmps(i)._col = Color.Red
                PaintCmpList(cmps, compo_list.CreateGraphics)
            End If
        Next i
    End Sub
 
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grafiken aufeinander positonieren (2.Teil) 
Autor: Sebi90
Datum: 08.03.18 20:05

Vielen, vielen Dank !
Echt Klasse, ich werde jetzt mal 2-3 Tage grübeln

Schönen Abend noch
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