我已经构建了一个Winforms表格布局,每个单元格中都有许多元素。我要做的是枚举我所关注的特定类型的所有控件,并删除它们相应的Click值。这是在运行时完成的,这就是为什么我不只是设置控件的初始属性。
我尝试过使用Control.ControlCollection属性,虽然我运气不好,因为它不是IEnumerable。备选方案我有以下代码,但问题是控件永远不会在控件中找到并抛出一个Null引用异常,因为我试图在空对象上设置 .Click ,但肯定是这个对象应该存在!救命啊!?
for (int row = 1; row < tblLayoutPanel.RowCount; row++)
{
for (int column = 0; column < tblLayoutPanel.ColumnCount; column++)
{
Type controlType = tblLayoutPanel.GetControlFromPosition(column, row).GetType();
if (controlType == typeof(CTLLabel) ||
controlType == typeof(OutputLabel))
{
Controls[tblLayoutPanel.GetControlFromPosition(column, row).Name].Click += null;
// Control is never found! *why?*
}
}
}
答案 0 :(得分:0)
原因是您使用GetControlFromPosition
方法获得的控件的父控件是tblLayoutPanel
。您正尝试让孩子控制tblLayoutPanel
控件的父级tblLayoutPanel
而不是tblLayoutPanel.Controls
集合。
为什么不使用GetControlFromPosition
方法获得的控件,而不是像这样访问控件。试试这个:
tblLayoutPanel.GetControlFromPosition(column,row)。点击