I'd like to recommend you read/study this CodeProject article: [
^] to better understand Events, Delegates, EventHandlers.
Of course you can add EventHandlers to WinForm Controls you create at run-time. Here's an example that demonstrates adding CheckBoxes to a Panel named 'CBPanel:
private List<checkbox> AllCheckBoxes = new List<checkbox>();
private List<checkbox> AllChecked = new List<checkbox>();
private List<checkbox> AllUnChecked = new List<checkbox>();
private CheckBox LastCBCheckedStateChanged;
public void AddCheckBoxes(Panel thePanel, int nCheckBoxes, List<string> cbText)
{
for (int i = 0; i < nCheckBoxes; i++)
{
var newCheckBox = new CheckBox();
AllCheckBoxes.Add(newCheckBox);
newCheckBox.Text = cbText[i];
newCheckBox.BackColor = Color.GhostWhite;
newCheckBox.ForeColor = Color.Black;
newCheckBox.CheckStateChanged += newCheckBox_CheckStateChanged;
thePanel.Controls.Add(newCheckBox);
newCheckBox.Location = new Point(20, (i * 40) + 20);
}
}
private void RemoveEventHandler(EventHandler theHandler)
{
foreach (CheckBox cbx in AllCheckBoxes)
{
cbx.CheckStateChanged -= theHandler;
}
}
private void ResetEventHandler(EventHandler theHandler)
{
foreach (CheckBox cbx in AllCheckBoxes)
{
cbx.CheckStateChanged += theHandler;
}
}
private void newCheckBox_CheckStateChanged(object sender, EventArgs e)
{
LastCBCheckedStateChanged = sender as CheckBox;
AllChecked = AllCheckBoxes.Where(cbx => cbx.Checked).ToList();
AllUnChecked = AllCheckBoxes.Where(cbx => ! cbx.Checked).ToList();
foreach (var cbx in AllChecked)
{
MessageBox.Show(string.Format("{0} is Checked", cbx.Text));
}
}
private void AddSomeCheckBoxes(object sender, EventArgs e)
{
AddCheckBoxes(CBPanel,4, new List<string>{"cb 1", "cb 2", "cb 3", "cb 4"});
RemoveEventHandler(newCheckBox_CheckStateChanged);
ResetEventHandler(newCheckBox_CheckStateChanged);
}