Controll e collezioni

lunedì 10 aprile 2006 - 16.59

AndreaKpr Profilo | Senior Member

Ciao a tutti raga!
Spego il mio Prb
Sto implementando un classettina di Bind tra oggetti ed un Dataset

Ho creato 3 controlli
- NumText
- StrText
- Combo

Dove tutti hanno implementata la proprietè PureData che ritorna o setta il valore nell'oggettino.
Ora nella form template volevo creare una collezione di oggetti ( che sono quelli che metto nella form)

A questo punto volevo fare un ciclo sulla collezione dove campo per campo del Dataset valorizzavo il relativo oggetto in maschera.
La questione sta che dichiaranto una collezione generica cosi : Collection<Object> cCampi = new Collection<Object>();

Ogni volta che analizzo un sigolo object lo devo castare all' controllo corrispondente per poter lavorare sulle proprioeta implementate.

La domanda è non vi è modo di creare una colezione "statica", cioè che esponga gia le porprioeta e medoti dei miei controlli ???


AndreaKpr Profilo | Senior Member


Si, sto utilizzando la 2.0
Dimmi dimmi di questa cosa !!!
Illuminami !!! ^_^

AndreaKpr Profilo | Senior Member

Grazie MArco, stasera me lo leggo e domani ti comnunico il risultato.

AndreaKpr Profilo | Senior Member

OK, l'idea è buona ma come faccio ad applicarla al mio caso che ho 3 oggetti diversi da collezzionare ???

AndreaKpr Profilo | Senior Member


Ci ho pensato pure io a fare una classe generica , usare i Generics su di essa, poi far ereditare gli oggetti da Tale Classe.
Ieri sera ero un po fuso dopo una dira gioranta, oggi ci riprovo...


AndreaKpr Profilo | Senior Member


Hey Coach, ho un problema...

Siccome nella mia template non voglio avere una collezione per ogni tipo di oggetto che inserisco nella form.
La strada da intraprendere è quella di far ereditare i tre controlli da una calsse comune. MA :

I tre Controlli ereditano gia da un altra classe...

Ho pensato ad un interfaccia, non credo sia possibile creare un Generics danto come tipo un interfaccia... O mi sbaglio ???

AndreaKpr Profilo | Senior Member

Spetta mi spiego meglio...

I tre Controlli oggetti sono cosi :

public class ctl_Testo : Infragistics.Win.UltraWinEditors.UltraTextEditor
{

}
----------------------------------------------------------
public class ctl_Numeri : Infragistics.Win.UltraWinEditors.UltraNumEditor
{

}
----------------------------------------------------------
public class ctl_Combo : : Infragistics.Win.UltraWinEditors.UltraBomboBox
{

}

Visto che ereditano gia da una classe non posso farli erediate da una altra classe "Base"...

Per Template,intendo un form Base (Da cui erediatre le altre),
li preparo la una collezione (Vuota), dove andrò a buttarci dentro i N° campi delle tre tipologie di controlli.

Il concetto è che non volevo mettere nella template e 3 collezioni (una per ogni tipo di controllo)...
Ma volevo anche eviatre di avere una collezione di Oggetti e di fere la Boxing ed Unboxing dei controlli per poter
andar a intergire con gli stessi..

Spero che di essere stato chiaro, e spero che mi sai a dare una mano... ^_^

AndreaKpr Profilo | Senior Member

>La cosa che puoi fare è creare un'interfaccia che viene implementata da ogni tua classe

--- Fino a qui ci sono

> Poi crei la classe generics utilizzando la where dei generics che in pratica è un contraint
> che ti dice che la classe deve ereditare/implementare una certa classe.

--- Scusa l'ignoranza ma mi sono preso dove dici di usare la Where dei Generisc ecc ecc ecc...
--- Non è mi faresti un piccolo esempio ???

AndreaKpr Profilo | Senior Member


--- Scusa ma sto ad impazzire ho implementato l'interfaccia cosi :

namespace MGControls
{
interface MGInterface
{
bool MGReadOnly { get; set; }
object MGPureData { get; }
}
}

--- Il controllo Base cosi :

namespace MGControls
{
class MgControlBase <T> where T : MGInterface
{
bool MGReadOnly
{
get
{
return false;
}
set
{

}
}

object MGPureData
{
get { return null; }
}

}
}

--- Il controllo da mettere nella form template cosi :

namespace MGControls
{
public partial class MGTextNumBox <T> : MgControlBase<T> where T : Infragistics.Win.UltraWinEditors.UltraNumericEditor, MGInterface
{
public MGTextNumBox()
{
InitializeComponent();
}

public MGTextNumBox(IContainer container)
{
container.Add(this);

InitializeComponent();
}

bool MGInterface.MGReadOnly
{
get
{
return false;
}
set
{

}
}

object MGInterface.MGPureData
{
get { return ""; }
}

}
}

--- Ma adesso quando compilo mi dice :

Error 1 Inconsistent accessibility: base class 'MGControls.MgControlBase<T>' is less accessible than class 'MGControls.MGTextNumBox<T>'
Error 2 Inconsistent accessibility: constraint type 'MGControls.MGInterface' is less accessible than 'MGControls.MGTextNumBox<T>'

--- Dove sbaglio dove ???

AndreaKpr Profilo | Senior Member

Ho provato ad eliminare del tutto l'eraditarietà della Infragistics, cioè fare come mi hai fatto vedere nell'esempio ma la cosa non cambia...

AndreaKpr Profilo | Senior Member

Forse ho risolto da solo, ho dovuto rendere pubblica la classe di base che non lo era...

Domani mattina faccio un giro + approfondito...

AndreaKpr Profilo | Senior Member

Coach, Ho un problemino con la classe

>>public class SubClass<T> : BaseClass<T> where T : ISomeInterface
>>{...}

Tanto per indenderci...

>>public class MGTextNumBox<T> : MgControlBase<T> where T : Infragistics.Win.UltraWinEditors.UltraNumericEditor, MGInterface
>>{...}

Quella che ho compilo cosi...

Ma adesso quando carico la dll nel progetto (dove esiste la template) non mi ricosce + la classe come COntrollo.
Infatti l'icona è qulla della classe e non + quella di un componente...

AndreaKpr Profilo | Senior Member

Nooooooooooooooooooooooooo....
Cade tutto cosi...

Allora devo perforza passare attraverso una collezione di Object e fare la Boxing & unBoxing dei controlli ???

Non c'è altra via ???


HELP HELP HELP HELP HELP HELP HELP !!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5