C# Control

Control screenshot

Windows Forms is built upon an object-oriented type hierarchy. This means that items such as your TextBox and Button are derived from a base class Control. You can act upon these items using the base Control class.

TextBoxButton

Example

To start, you can create a new Windows Forms application and add several TextBox and Button controls to the enclosing Form by dragging from the Toolbox. Next, add the Form1_Load event by double-clicking on the window itself.

C# program that uses Control references

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
	public Form1()
	{
	    InitializeComponent();
	}

	private void Form1_Load(object sender, EventArgs e)
	{
	    // Loop through each Control in ControlCollection.
	    foreach (Control control in base.Controls)
	    {
		if (control is TextBox)
		{
		    control.Text = "box";
		}
		else if (control is Button)
		{
		    control.Text = "push";
		}
	    }
	}
    }
}
Foreach loop construct

Please look at the foreach-loop in the Form1_Load event handler. This loop acts upon the base.Controls collection, which is an instance of ControlCollection. You are accessing each TextBox and Button (among others) in this loop.

However:The TextBox and Button instances are being accessed through a reference to their base class.

Is keyword

Next, you can use the "is" and "as" casts to determine the derived type of the Control reference. You can even mutate the properties of the Control instances by assigning their properties. This does not require any more type information.

IsAs

LINQ

LINQ: language integrated query

You can also use the LINQ extensions to the C# language to use the Controls collection. The OfType extension can make searching for all Control instances of a certain derived type easier.

OfTypeQuery Windows Forms Controls

Summary

The Control type—and the base.Controls collection on each Form instance—lets you access all the items such as TextBox, Button and more in a unified way. This can improve the clarity of your C# code.


C#: Windows