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