当前位置: 代码迷 >> C# >> 遍历窗体上所有的组件,如何写呢
  详细解决方案

遍历窗体上所有的组件,如何写呢

热度:95   发布时间:2016-05-05 05:17:31.0
遍历窗体上所有的组件,怎么写呢?
下面一个代码运行,老是报错,请问应该怎么改呢?
未将对象引用设置到对象的实例。”

private void button1_Click(object sender, EventArgs e)
        {
          foreach (Component comp in this.components.Components)
            {
                if (comp != null)
                {
                    MessageBox.Show(comp.GetType().Name);
                }
            }     
        }

------解决思路----------------------
要么是你的 this.components为null
要么是 this.components.Components 为null···
------解决思路----------------------
this.components是组件的容器,如果你的窗体没有组件,components一直保持为null。
窗体有没有组件简单的判断方法:找到相应Designer.cs,在里面搜components,如果只能搜到两处,表明你的窗体没有组件。

Button、Label、TextBox不是组件
Timer是组件

也就是:他是管理组件的一个容器。
------解决思路----------------------
引用:
Quote: 引用:

只找解决办法却不思考原因

呵呵,我也在找原因,我觉得1楼这种写法,不应该有问题,为什么存在NULL 问题呢,既然是组件,应该都是存在的啊,不应该NULL啊


如果没有组件,components属性值为 null。所以你需要先判断一下是不是 null。

不是说什么要“try....catch”。这种方式就是“只找解决办法却不思考原因。(其实是只找糊弄办法,而不是真正解决办法)

你的代码的逻辑应该这样设计

if( this.components== null)
         MessageBox.Show(”木有主见!"));
else
{
         foreach (Component comp in this.components.Components)
            {
                  MessageBox.Show(comp.GetType().Name);
           }   
}
  相关解决方案