【问题标题】:Accessing and Setting Winforms Control at runtime在运行时访问和设置 Winforms 控件
【发布时间】:2012-11-30 12:17:20
【问题描述】:

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

【问题讨论】:

    标签: c# winforms tablelayoutpanel


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      相关资源
      最近更新 更多