Originariamente inviato da WebMinus
Volendo accedere ai controlli e alle loro proprietà, in un web user control, devo per forza generare tutto in code behind all'interno del Page_Load, vero (in realtà spero di no.

)? Se anche solo una label, per esempio, invece di generarla al page_load nel fine .cs la inserisco mediante tag "<asp:" , questa non sarà più accessibile e modificabile da un ipotetico user control che erediti, corretto?
Casomai è il contrario.
Se crei i controlli da codice nel codebehind, stai sicuro che non ci accedi!!!
Se invece li crei come controlli nella parte ascx, puoi raggiungerli verificando ed eventualmente modificando in public la loro dichiarazione.
In genere comunque, quando si lavora ad oggetti (come in questo caso) le proprietà si espongono all'esterno tramite metodi di accesso come ti è già stato suggerito. Vero è anche che si risparmia un po' di tempo e di codice laciandoli accessibili senza metodi.
Ti faccio un esempio (da codice - NON nel load - ma equivale a metterli nel ascx):
codice:
class controlloBase
{
public Label lblTesto { get; set; }
}
class myControllo : controlloBase
{
//myControllo eredità già lblTesto dal controlloBase
}
/******************************************/
//la pagina che utilizza il controllo myControllo
class myPage : Page
{
protected void Page_Load(object sender, EventArgs e)
{
myControllo ctrl = new myControllo();
ctrl.lblTesto.Text = "Ciao da Glauco";
}
}
Nel caso tu abbia la necessità invece di nascondere l'implementazione del controllo base e permettere SOLO l'utilizzo dei dati, allora devi fare:
codice:
class controlloBase
{
protected Label lblTesto { get; set; }
}
class myControllo : controlloBase
{
//myControllo eredità lblTesto dal controlloBase
//ma non è accessibile dall'esterno
Public string Testo {
get
{
return this.lblTesto.Text;
}
set
{
this.lblTesto.Text = value;
}
}
}
/******************************************/
//la pagina che utilizza il controllo myControllo
class myPage : Page
{
protected void Page_Load(object sender, EventArgs e)
{
myControllo ctrl = new myControllo();
//lblTesto non è più accedibile, ma esposta tramite la proprietà Testo
ctrl.Testo = "Ciao da Glauco";
}
}