JavascriptProva

sabato 31 agosto 2013

Uso di un'interfaccia da passare come parametro per il posizionamento relativo di oggetti in un form.

Per arrangiare spazialmente una serie di oggetti creati tutti a runtime, ho avuto l'idea di creare un'interfaccia che ho chiamato ISpazio, contenente le sole proprietà spaziali di questi oggetti personalizzati, i quali debbono implementarla, in modo che questa interfaccia venga passata come parametro ad altri oggetti, che adeguino la loro posizione di conseguenza.

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