dotnet-snippets.de
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1405 | Anzahl registrierter User: 1436 | Besucher online: 31
Hauptmenü
Home
Top Ten
Zufälliger Snippet
Tech-Ed-Gewinnspiel
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Partner von Codezone.de


Member of Microsoft Community Leader/Insider Program (CLIP)

Linien u. Kreise a la VB6 - Einfach Zeichnen


Autor: General Bison
Sprache: VB.NET
Bewertung: 5,89
(2 Bewertungen)

Anzahl der Aufrufe: 8923
  

Beschreibung:

Da in VB.net die Linien etc von VB6 fehlen, ist hier der Ersatz ;)
Seltsam, dass das VS KEINERLEI Möglichkeiten bietet, außer per Code, Linien zu zeichnen.

Es können(mit der eigenschaft "FormArt"):
----------
Rechtecke
Quadrate
Kreise/Elipsen
Diagonalen(noch nicht ganz fertig)

mit und ohne Rand dargestellt werden.
Die Diagonalen verwenden den "Rand" zur Darstellung, also auch Dicke und Farbe.

--------------------------------------
-----------ANWENDUNG:-----------
--------------------------------------
Es MUSS ein neues Benutzersteuerelement (Usercontrol)
mit dem Namen:uscSymbols erzeugt werden
und anschließend diesen Code hineinkopieren.

--------------------------------------
Anmerkung:

Bei SO schlechten! Votes, wüsste ich WIRKLICH GERNE WARUM!
Dann kann man vieleicht auch was "besser" machen!
eine kleine bemerkung wäre ja wohl nicht zuviel verlangt bei 3 Punkten oder?


Abgelegt unter: Zeichnen, Linie, Kreis, Control, Benutzersteuerelement, rundes Control.



Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
'Es MUSS ein neues Benutzersteuerelement (Usercontrol)
'mit dem Namen:uscSymbols erzeugt werden
'und anschließend diesen Code hineinkopieren:

'© General Bison
'Da in VB.net die Linien etc von VB6 fehlen,
'ist hier der Ersatz ;)
'
'Info:
'Da das VisualStudio im Designer das Ziehen
'des Objektes kleiner 10Pixel nicht zulässt,
'MUSS die Höhe/Breite per Hand eingegeben werden,
'damit man eine Linie erhält.

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.ComponentModel

Public Class uscSymbols
    Private Sub uscSymbols_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Public Enum FormArtEnum
        <Description("Control wird als Rechteck dargestellt(als Linie nutzbar!)")> Rechteck
        <Description("Stellt einen Kreis/Elipse dar")> Kreis
        <Description("Das Control ist IMMMER Quadratisch")> Quadrat
        <Description("links oben nach rechts unten")> LinksOben_RechtsUnten
        <Description("rechts oben nach links unten")> RechtsOben_LinksUnten
    End Enum

    Private _FormArt As FormArtEnum = FormArtEnum.Rechteck
    <Description("Die Darstellungsart")> _
    Public Property FormArt() As FormArtEnum
        Get
            Return _FormArt
        End Get
        Set(ByVal value As FormArtEnum)
            If _FormArt = FormArtEnum.Kreis AndAlso value <> _FormArt Then
                CheckMyArt(value)
            End If
            _FormArt = value

            If value > FormArtEnum.Quadrat Then
                _RandSichtbar = True
            End If
            Me.Refresh()
        End Set
    End Property

    Private _LockHeight As Integer
    Private _SizeHeightLock As Boolean = False
    <Description("Sperrt die aktuelle Höhe")> _
    Public Property SizeHeightLock() As Boolean
        Get
            Return _SizeHeightLock
        End Get
        Set(ByVal value As Boolean)
            _SizeHeightLock = value
            _LockHeight = Me.Height
            Me.Refresh()
        End Set
    End Property

    Private _LockWidth As Integer
    Private _SizeWidthLock As Boolean = False
    <Description("Sperrt die aktuelle Breite")> _
    Public Property SizeWidthLock() As Boolean
        Get
            Return _SizeWidthLock
        End Get
        Set(ByVal value As Boolean)
            _SizeWidthLock = value
            _LockWidth = Me.Width
            Me.Refresh()
        End Set
    End Property

#Region "Rand"
    Private _RandSichtbar As Boolean = False
    <Description("Rand Darstellen")> _
    Public Property RandSichtbar() As Boolean
        Get
            Return _RandSichtbar
        End Get
        Set(ByVal value As Boolean)
            _RandSichtbar = value
            Me.Refresh()
        End Set
    End Property

    Private _RandDicke As Integer = 0
    <Description("Randdicke in Pixeln. Kann nicht kleiner 0 sein!")> _
    Public Property RandDicke() As Integer
        Get
            Return _RandDicke
        End Get
        Set(ByVal value As Integer)
            If value >= 0 Then
                _RandDicke = value
            End If
            Me.Refresh()
        End Set
    End Property

    Private _RandFarbe As System.Drawing.Color = Color.White
    <Description("Randfarbe")> _
    Public Property RandFarbe() As System.Drawing.Color
        Get
            Return _RandFarbe
        End Get
        Set(ByVal value As System.Drawing.Color)
            _RandFarbe = value
            Me.Refresh()
        End Set
    End Property
#End Region

    Private _Qualitaet As SmoothingMode = SmoothingMode.Default
    <Description("Qualität des Objekts (zur zeit nur mit Effekt auf den Rand)")> _
    Public Property Qualitaet() As SmoothingMode
        Get
            Return _Qualitaet
        End Get
        Set(ByVal value As SmoothingMode)
            _Qualitaet = value
            Me.Refresh()
        End Set
    End Property

    Private Sub CheckMyArt(ByVal myart As FormArtEnum)
        Select Case myart
            Case FormArtEnum.Kreis
                Dim Sb As New System.Drawing.Drawing2D.GraphicsPath
                Sb.AddEllipse(2, 2, Me.Width - 5, Me.Height - 5)
                Me.Region = New System.Drawing.Region(Sb)
            Case Else
                Dim Sb As New System.Drawing.Drawing2D.GraphicsPath
                Dim r As New Rectangle(0, 0, Me.Width, Me.Height)
                Sb.AddRectangle(r)
                Me.Region = New System.Drawing.Region(Sb)
        End Select
    End Sub

    Private Sub uscSymbols_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        e.Graphics.SmoothingMode = _Qualitaet
        Dim p As Pen
        Dim r As Rectangle
        CheckMyArt(_FormArt)

        Select Case _FormArt
            Case FormArtEnum.Kreis
                If RandSichtbar = True Then
                    p = New Pen(_RandFarbe, _RandDicke)
                    r = New Rectangle(2, 2, Me.Width - 5, Me.Height - 5)
                    e.Graphics.DrawEllipse(p, r)
                End If

            Case FormArtEnum.Rechteck, FormArtEnum.Quadrat
                If RandSichtbar = True Then
                    p = New Pen(_RandFarbe, _RandDicke)
                    r = New Rectangle(0, 0, Me.Width, Me.Height)
                    e.Graphics.DrawRectangle(p, r)
                End If

            Case FormArtEnum.LinksOben_RechtsUnten
                p = New Pen(_RandFarbe, _RandDicke)
                e.Graphics.DrawLine(p, 0, 0, Me.Width, Me.Height)

            Case FormArtEnum.RechtsOben_LinksUnten
                p = New Pen(_RandFarbe, _RandDicke)
                e.Graphics.DrawLine(p, Me.Width, 0, 0, Me.Height)

        End Select
    End Sub

    Private Sub uscSymbols_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
        Select Case _FormArt
            Case FormArtEnum.Quadrat
                If Me.Width <> Me.Height Then
                    Me.Height = Me.Width
                End If
        End Select
        If _SizeHeightLock = True Then
            Me.Height = _LockHeight
        End If
        If _SizeWidthLock = True Then
            Me.Width = _LockWidth
        End If
    End Sub
End Class

Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Mathys JP schrieb am:  06.02.2008 20:32:11

Zugegeben ich bin blutiger Anfänger ... ich habe das alles so gemacht wie es da stand. Aber wie geht es nachher weiter? Hab ich dann irgendwo ein Menü wo ich zB eine Linie per drag n drop in mein Form ziehen kann?

Ich kann den letzten schritt irgendwie nicht nachvollziehen was zu tun ist.

Hoffe auf Hilfe ... Danke.
General Bison schrieb am:  09.02.2008 12:58:24

Also nachdem du das Benutzersteuerelement(UserControl) erstellt und den Code hinein kopiert hast, !MUSST! du auf:
Erstellen-> >PROJEKTNAME> neu erstellen
klicken.
Erst dann werden eigene Benutzersteuerelemente verfügbar.
Anschließend gehst du auf ein Formular und nimmst, Links in der Toolbox, das neue Control ganz oben mit Zahnradsymbol.
Das nimmst du und packst es auf die Form.
Fertig ;)
Mathys JP schrieb am:  15.02.2008 07:57:06

OK, das hat so weit alles geklappt. Aber ... wie mache ich eine einfache Waagerechte oder Senkrechte Linie? Und, lässt sich die Breite der Linie irgendwie ändern?


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.