Ho creato una classe prospettoCalendario in una libreria di classi:
Public Class prospettoCalendario(Of G As {New, Control}, T As {New, Control})
e una classe, sempre nella stessa libreria, chiamata nameGrid:
Public Class nameGrid(Of T As {New, Control}, N As {New, Control})
Nel modulo principale del programma, ho istanziato queste classi:
Public Class Form1
Dim mioProspettoCalendario As prospettoCalendario(Of casella, turno)
Dim miaGrigliaNomi As nameGrid(Of nome, numero)
Dim bttSalva As bttSave
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
mioProspettoCalendario = New prospettoCalendario(Of casella, turno)(Me, 2013, 8, , 50, , , 5)
miaGrigliaNomi = New nameGrid(Of nome, numero)(Me, 3, mioProspettoCalendario, , 50)
.......
Nel costruttore di ciascuna delle classi bisogna che fornisca un altro oggetto cui fare riferimento per il posizionamento spaziale degli oggetti che da queste classi vengono istanziati.Per fare questo, inizialmente, non potendo passare una classe come parametro, ho passato direttamente l'oggetto concreto, ma trattandosi di una libreria di classi che presuppone un eventuale riutilizzo del codice questa è una fortissima limitazione, in quanto praticamente l'uso della classe si troverebbe vincolato al nome dell'oggetto.
Ho quindi avuto l'idea di creare, nella libreria di classi, un'interfaccia che esponga soltanto il comportamento spaziale di un oggetto:
Public Interface ISpazio
Property Left As Integer
Property Top As Integer
Property Width As Integer
Property Height As Integer
End Interface
...che viene così implementata dalla classe prospettoCalendario i cui oggetti istanziati serviranno come riferimento per il posizionamento spaziale degli oggetti istanziati da nameGrid:
Public Class prospettoCalendario(Of G As {New, Control}, T As {New, Control})
Implements ISpazio
........
Public Property Left As Integer Implements ISpazio.Left
Get
Return _Left
End Get
Set(ByVal value As Integer)
_Left = value
End Set
End Property
Private _Top As Integer
Public Property Top As Integer Implements ISpazio.Top
Get
Return _Top
End Get
Set(ByVal value As Integer)
_Top = value
End Set
End Property
Private _Width As Integer
Public Property Width As Integer Implements ISpazio.Width
Get
Return _Width
End Get
Set(ByVal value As Integer)
_Width = value
End Set
End Property
Private _Height As Integer
Public Property Height As Integer Implements ISpazio.Height
Get
Return _Height
End Get
Set(ByVal value As Integer)
_Height = value
End Set
End Property
...e dunque nel costruttore di nameGrid appare l'interfaccia ISpazio passata come parametro:
Sub New(ByRef frm As Form, ByVal nCaselle As Integer, Optional ByRef refObj As ISpazio = Nothing, Optional ByVal refXDistance As Integer = 100, Optional ByVal refYDistance As Integer = 0, Optional ByVal HSpazio As Integer = 0, Optional ByVal VSpazio As Integer = 0)
(che appare come parametro opzionale per mia scelta).
Nessun commento:
Posta un commento