Siin üks näide, kuida ülesse leida kõik teatud interface kasutavad usercontrolid antud näites
/// <summary>
/// leiame kõik antud lehel olevad ICVPublishView interfacega olevad asjad ülesse
/// </summary>
/// <returns></returns>
private List<ETISUserControls.Views.ICVPublishView> FindICVPublishViewUserControls()
{
List<ETISUserControls.Views.ICVPublishView> ICVkontrollid = new List<ETISUserControls.Views.ICVPublishView>();
ICVPublishViewUserControl(this.Page.Form, ICVkontrollid); //siin kindlasti tähele panna, et controlid on lehe Form objekti omad
return ICVkontrollid; // siin nimekirjas on nad nüüd kõik olemas
}
Kasutame rekursiivset pöördumist, iga controli seest otsime omakorda edasi
private void ICVPublishViewUserControl(Control kont, List<ETISUserControls.Views.ICVPublishView> ICVkontroll)
{
try
{
if (kont != null) //igaks juhuks, kunagi ei või teada mis aspx veebilehe eventis asja kasutatakse, this.Page.Form võib ka veel null olla
{
foreach (Control ker in kont.Controls)
{
// siin kontollime,kas asi on "õige asi" kasutame C# "as" operandi, kas annab antud tüübiks pöörata
ETISUserControls.Views.ICVPublishView hte = ker as ETISUserControls.Views.ICVPublishView;
if (hte != null) // kui oli õige asi siis lisame nimekirja
{
ICVkontroll.Add(hte); //"as" teeb kohe ka selle õige objekti valmis, lihtsalt kontrolliks piisab ka "is" operandist
}
else //leitud ICVPublishView seest enam ei otsi
{
ICVPublishViewUserControl(ker, ICVkontroll);
}
}
}
}
catch (SystemException ex)
{
this.CustomValidator1.ErrorMessage = ex.Message;
this.CustomValidator1.IsValid = false;
}
}
Kuidas asja kasutada
//paneme asjad nimekirja
List<ETISUserControls.Views.ICVPublishView> kontro = this.FindICVPublishViewUserControls();
//nüüd on meil list leitud objektidega olemas
foreach (ETISUserControls.Views.ICVPublishView ker in kontro)
{
ker.CfPers_CV_row = this.CfPers_CV_row; //rakendame asja
}
Blogged with the Flock Browser