che io sappia non c'è un metodo ricorsivo che ti permette di ciclare anche tra gli oggetti interni
prova questa
private Control FindControlRecursive(Control root, object obj)
{
if (root.GetType() == typeof(CheckBox))
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, obj);
if (t != null)
{
return t;
}
}
return null;
}
poi la richiami così
myCnt = FindControlRecursive(cnt, cbk);
if (myCnt != null)
{....