>io dal database recupero una descrizione e il percorso dell'immagine,
>così da visualizzarli in un usercontroll.
>Vorrei che questo caricamento fosse dinamico, cioè avere una
>lista di miei componenti, per ogni record visualizzare un usercontrol
>istanziato.
una volta creata l'istanza la valorizzi come un qualsiasi componente, non cambia se l'hai creato dinamicamente. a tal proposito ti consiglio di far implementare un tipo Interface ai tuoi userControl in modo da poter valorizzare senza troppi giri i tuoi campi.
esempio:
[CODE]
public interface IMioControllo
{
string Testo { get; set; }
}
public partial class UserControl1 : UserControl, IMioControllo
{
public UserControl1()
{
InitializeComponent();
}
public string Testo
{
get
{
return this.textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
}
public partial class UserControl2 : UserControl, IMioControllo
{
public UserControl2()
{
InitializeComponent();
}
public string Testo
{
get
{
return this.textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
}
[/CODE]
e la lista la puoi creare così :
oppure puoi usare i dynamic (se usi il framework 4.0) senza interface, ma in questo caso devi accertarti che tutti i tuoi UserControl abbiamo (come per questo esempio) una proprietà Testo.
esempio:
negli esempi sopra, prima creo una lista di istanze di userControl, 1 per ogni tipo che deriva da UserControl nel caso senza interface, oppure 1 per ogni tipo che implementa l'interface (solo quelle e teoricamente potrebbe non essere un UserControl ma un qualsiasi derivato da Control), poi imposto il testo nella proprietà Testo e lo aggiungo ad un contenitore (in questo caso panel). Ovviamente per prendere i valori da db non dovrebbe essere difficile.
comunque io ti consiglio a limite di usare una lista di tipi dalla quale poi peschi il controllo che ti serve e ne crei l'istanza, o meglio ancora, chiami il tipo che ti serve quando ti serve e lo crei (magari quando estrai i dati) senza fare una lista prima.
>esiste un modo? utilizzando una listbox?
>
si :) più di uno! ma la listBox non ha nulla a che vedere se non per visualizzare!
>in un'applicazione web userei una datagridview con una colonna
>di tipo itemptemplate, ma in una applicazione winform?
tieni presente che WinForm non è web...
probabilmente stai sbagliando approccio, prova a dettagliare bene cosa vuoi fare, probabilmente si risolve con un datagridview o comunque in qualche altro modo. Molto raramente in winForm si aggiungono gli userControl dinamicamente prendendo dati da db. Nel particolare, mi sembra più corretto (visto che devi usare textBox e image) usare un DataGridView con le colonne corrette (oltretutto puoi creartele personalizzate). Se poi vuoi "avvicinarti" di più al modo "web", allora scegli WPF e non windows form, li usi magnificamente i template e fai esattamente quello che vuoi con molto meno sforzo di windows form.