在运行时访问和设置Winforms控件

时间:2012-11-30 12:17:21

标签: c# winforms tablelayoutpanel

我已经构建了一个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?*
        }
    }
}

1 个答案:

答案 0 :(得分:0)

原因是您使用GetControlFromPosition方法获得的控件的父控件是tblLayoutPanel。您正尝试让孩子控制tblLayoutPanel控件的父级tblLayoutPanel而不是tblLayoutPanel.Controls集合。

为什么不使用GetControlFromPosition方法获得的控件,而不是像这样访问控件。试试这个:     tblLayoutPanel.GetControlFromPosition(column,row)。点击