The System.Web.UI.Control class has a FindControl method for finding a control by its ID. This method searches for a given control in the first level child controls, and not in any child controls of a child. In order to do the latter, a custom method must be implemented. Below is a generic, recursive, extension method that does this:

public static class ControlExtension
{
	public static T FindControlRecursive<T>(this Control container, string id)
			where T : Control
	{
		if (container.HasControls())
		{
			T foundControl = null;

			foreach (Control control in container.Controls)
			{
				if (control.ID == id && control is T)
					foundControl = (T) control;
				else
					foundControl = FindControlRecursive<T>(control, id);

				if (foundControl != null)
					return foundControl;
			}
		}

		return null;
	}
}

Usage:

var control = Page.FindControlRecursive<TextBox>("TxtName");