Hej! Om den ärver metoden från basklassen så har du möjlighete att använda dess gränssnitt. Du bör oxå skicka en referens till var kontrollen skall ritas på i draw metoden. Eller ha det som egenskap. Hej. Nu har jag tillgång till VB.NET. Korrigerat exemplet: <b>Fick däremot inte de båda konstruktorna att fungera. Någon som vet varör det inte gör det?</b>Klasser i collection
Jag har ett antal olika klasser som alla har olika funktioner för att rita saker på en form. Klasserna ser typ ut som dem nedan:
<code>
Class Ritobjekt
Public X As Int32
Public Y As Int32
Public Width As Int32
Public Height As Int32
Class Linje
Inherits Ritobjekt
Public Sub Draw()
'Funktionen för att rita ut linjen
End Sub
End Class
Class Cirkel
Inherits Ritobjekt
Public Sub Draw()
'Funktionen för att rita ut cirkeln
End Sub
End Class
End Class
</code>
När jag sen skapar nya instanser av klasserna cirkel och linje så vill jag lägga dessa i en collection eller nått så jag kan loopa igenom dem och rita ut varje objekt. Koden skulle väl vara nått liknande:
<code>
Dim Samling As Collection
</code>
I denna collection skulle man kunna lägga till alla objekten som skall ritas. Frågan är hur jag sedan loopar igenom detta. Kan man göra nått liknande:
<code>
Samling(i).Draw
</code>
eller? Är det nån som har nått bra förslag, eller synpunkter på hur man skulle kunna göra?
Tack på förhand!
DanneSv: Klasser i collection
Har ingen möjlighet att test koden. Men typ något sådant här.:
<code>
Class Ritobjekt
Public X As Int32
Public Y As Int32
Public Width As Int32
Public Height As Int32
Public Sub New()
End Sub
Public Sub New(X As Int32, Y As Int32, Width As Int32, Height As Int32)
Me.X = X
Me.Y = Y
Me.Width = Width
Me.Height = Height
End Sub
MustOverride Public Sub Draw(Form As Form)
End Sub
MustOverride Public Sub Draw(Control As Control)
End Sub
Class Linje
Inherits Ritobjekt
Overrides Public Sub Draw(Form As Form)
'Funktionen för att rita ut linjen på formulär
End Sub
Overrides Public Sub Draw(Control As Control)
'Funktionen för att rita ut linjen på formulär
End Sub
End Class
Class Cirkel
Inherits Ritobjekt
Overrides Public Sub Draw(Form As Form)
'Funktionen för att rita ut linjen på formulär
End Sub
Overrides Public Sub Draw(Control As Control)
'Funktionen för att rita ut linjen på formulär
End Sub
End Class
End Class
Private Sub Test()
Dim Samling As New ArrayList
Dim RitObjekt As RitObjekt
Samling.Add(New Linje(0,0,100,100))
Samling.Add(New Cirkel(200,100,100,100))
For Each RitObjekt In Samling
RitObjekt.Draw Me
Next
End Sub
</code>Sv: Klasser i collection
<code>
Public MustInherit Class Ritobjekt
Public X As Integer
Public Y As Integer
Public Width As Integer
Public Height As Integer
Public Sub New()
End Sub
Public Sub New(ByVal X As Integer, ByVal Y As Integer, ByVal Width As Integer, ByVal Height As Integer)
Me.X = X
Me.Y = Y
Me.Width = Width
Me.Height = Height
End Sub
Public MustOverride Sub Draw(ByVal Graphics As System.Drawing.Graphics)
Public Class Linje
Inherits Ritobjekt
Public Overrides Sub Draw(ByVal Graphics As System.Drawing.Graphics)
Graphics.DrawLine(System.Drawing.Pens.Black, X, Y, X + Width, Y + Height)
End Sub
End Class
Public Class Cirkel
Inherits Ritobjekt
Public Overrides Sub Draw(ByVal Graphics As System.Drawing.Graphics)
Graphics.DrawEllipse(System.Drawing.Pens.Black, X, Y, Width, Height)
End Sub
End Class
End Class
</code>
Fick däremot inte de båda konstruktorna att fungera. Någon som vet varör det inte gör det?
Du kan anropar den så här:
<code>
Private Samling As New ArrayList()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Linje As New Ritobjekt.Linje()
Linje.Width = 100
Linje.Height = 100
Samling.Add(Linje)
Dim Cirkel As New Ritobjekt.Cirkel()
Cirkel.Width = 100
Cirkel.Height = 100
Samling.Add(Cirkel)
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim RitObjekt As RitObjekt
For Each RitObjekt In Samling
RitObjekt.Draw(e.Graphics)
Next
End Sub
Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
Dim RitObjekt As RitObjekt
For Each RitObjekt In Samling
RitObjekt.Draw(e.Graphics)
Next
End Sub
</code>
Den är generll kan både rita på ett formulär och/eller kontroll, i detta fall en panel.Sv: Klasser i collection
construktorn ärvs inte...
du måste implementera alla dina constructors i varje klass..
//Roger