Cora Knowledge Center

Support

Find Controls on a Form

Use the API to find controls on a form.

using System;
using System.Collections.Generic;
using System.Web.UI;
using PNMsoft.Sequence.Forms.Web.UI;
 
namespace CustomCodeBehind
{
    /// <summary>
    /// Extending the Control element
    /// </summary>
    public static class ControlExtender
    {
        public static T FindControl<T>(this Control control, string id) where T :Control
        {
            T result = default(T);
 
            if (string.Equals(control.ID, id, StringComparison.OrdinalIgnoreCase))
            {
                if (control is T)
                {
                    return (T)control;
                }
                return result;
            }
            try
            {
                foreach (Control c in control.Controls)
                {
                    T ctr = c.FindControl<T>(id);
 
                    if (ctr != default(T))
                    {
                        return ctr;
                    }
 
                }
            }
            catch (Exception)
            {
            }
 
 
            return result;
        }
 
        /// <summary>
        /// Find all control of type T recursively
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="control"></param>
        /// <param name="controls"></param>
        internal static void FindControl<T>(this Control control, List<T> controls)where T : Control
        {
            if (controls == null) controls = new List<T>();
 
            if (control is T)
            {
                controls.Add((T)control);
            }
 
            foreach (Control c in control.Controls)
            {
                FindControl<T>(c, controls);
            }
        }
 
        /// <summary>
        /// Add a recursively search for contained control by its name
        /// </summary>
        /// <param name="currentCtrl">The container</param>
        /// <param name="controlId">The control id</param>
        /// <returns>The searched control</returns>
        public static Control FindControlByIdRecursive(this Control currentCtrl,string controlId)
        {
            if (currentCtrl == null)
                return null;
 
            Control ctrl = currentCtrl.FindControl(controlId);
            if (ctrl == null)
                foreach (Control subCtrl in currentCtrl.Controls)
                {
                    ctrl = subCtrl.FindControlByIdRecursive(controlId);
                    if (ctrl != null)
                        break;
                }
            return ctrl;
        }
 
        /// <summary>
        /// Get a list of controls from the page based on their type
        /// </summary>
        /// <param name="currentCtrl">The parent control to look in it</param>
        /// <param name="controlType">The type of the controls to be retrieved.</param>
        /// <returns>A list of controls selected by their type</returns>
        public static List<Control> FindControlsByTypeRecursive(this ControlcurrentCtrl, string controlType)
        {
            List<Control> ctrls = new List<Control>();
            Type type = Type.GetType(controlType);
            if (currentCtrl.GetType() == type)
                ctrls.Add(currentCtrl);
            else
                foreach (Control subCtrl in currentCtrl.Controls)
                {
                    ctrls.AddRange(subCtrl.FindControlsByTypeRecursive(controlType));
                }
 
            return ctrls;
        }
 
        /// <summary>
        /// Returns the parent Form control of a control. In case there is no parent form, returns null
        /// </summary>
        /// <param name="currentCtrl">The current control to start from</param>
        /// <returns></returns>
        public static FormControl GetParentFormCtrl(this Control currentCtrl)
        {
            if (currentCtrl == null)
                return null;
 
            var ctrl = currentCtrl.Parent;
            if (ctrl is FormControl)
                return (ctrl as FormControl);
            return ctrl.GetParentFormCtrl();
        }
 
        public static T GetParentForm<T>(this Control ctrl)
            where T : Control
        {
            if (!(ctrl is T))
                return GetParentForm<T>(ctrl.Parent);
 
            return (T)ctrl;
        }
 
 
        /// <summary>
        /// Find a parent control (container) by its id. Returns null when no parent is found
        /// </summary>
        /// <param name="currentCtrl">The current control to start fro</param>
        /// <param name="controlId">The parent id to look for</param>
        /// <returns></returns>
        public static Control GetParentControlById(this Control currentCtrl, stringcontrolId)
        {
            if (currentCtrl == null)
                return null;
 
            var ctrl = currentCtrl.Parent;
            return ctrl.ID == controlId ? ctrl : ctrl.GetParentControlById(controlId);
        }
    }
}