0

我构建了一个 Winforms 表格布局,每个单元格中有许多元素。我要做的是枚举我关心的特定类型的所有控件,并删除它们相应的 Click 值。这是在运行时完成的,这就是为什么我不只是设置控件的初始属性。

我尝试过使用 Control.ControlCollection 属性,尽管我运气不佳,因为它不是 IEnumerable。替代方案我有以下代码,但问题是在控件中永远找不到控件,并且抛出空引用异常,因为我试图设置.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?*
        }
    }
}
4

1 回答 1

0

原因是您使用GetControlFromPosition方法获得的控件的父控件是tblLayoutPanel. 您试图在控件tblLayoutPanel的父级中获取子控件tblLayoutPanel而不是tblLayoutPanel.Controls集合。

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

于 2012-11-30T12:30:56.990 回答