Foreach在将所有控件从一种形式复制到另一种形式时没有遍历所有控件

帕万·曼朱纳斯(Pavan Manjunath)

我试图将所有控件从动态窗体复制到另一个静态声明的窗体。奇怪的是,正好有一半被复制了。代码看起来像这样-

// Constructor of static form
public ApplicationForm(dynamic form)
{
        // Add all controls from the dynamic form to the Application form
        Console.WriteLine("I have total of {0} controls\n", form.Controls.Count);
        int i = 0;
        foreach (Control c in form.Controls)
        {
            i++;
            this.Controls.Add(c);
            Console.WriteLine(" Number of controls rem {1}\n",
                              form.Controls.Count);
        }
        Console.WriteLine("I added a total of {0} controls and still have {1}\n",i,     
                           form.Controls.Count);
}

对于一个特定示例,在循环开始时有56个控件,在循环结束时还剩下27个控件。为了测试,我在第一个循环之后再次添加了相同的for循环。这次还剩下13个。

为什么只添加一半控件?为什么foreach循环会过早退出?

PS:我之所以这样做,是因为我知道一种捕获动态表格击键的方法。对于静态表单,我可以覆盖ProcessCmdKey和捕获击键,但是我不知道动态表单有任何等效项

勒内

您的假设可能是:

    foreach (Control c in form.Controls)
    {
        this.Controls.Add(c);
    }

仅影响一个ControlColection,即上的集合this但是,一个控件只能有一个父级。Add实现的内部结构揭示了以下内容:

public virtual void Add(Control value)
{
    // skipped stuff
    if (value.parent != null)
    {
        value.parent.Controls.Remove(value);
    }
    base.InnerList.Add(value);
    // many more
 }

注意该Add方法如何调用Remove父控件集合。InnerListArrayList每次将控件添加到其他窗体时,其大小都会在父窗体上减小。因此,您只处理其中的一半。

在开始将控件副本添加到List<Control>第一个控件之前,然后将列表中的控件添加到ApplicationForm。

    // copy controls to list
    var list = new List<Control>();
    foreach (Control c in form.Controls)
    {
        list.Add(c);
    }
    Console.WriteLine("I have total of {0} controls\n", form.Controls.Count);
    int i = 0;
    // iterate over list
    foreach (Control c in list)
    {
        i++;
        this.Controls.Add(c);
        Console.WriteLine(" Number of controls rem {1}\n",
                          form.Controls.Count);
    }
    Console.WriteLine("I added a total of {0} controls and still have {1}\n",i,     
                       form.Controls.Count);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中将控件和变量的状态从一种形式复制到另一种形式

来自分类Dev

如何将值从一种形式传递到另一种形式的动态创建的控件

来自分类Dev

在Visual Basic 6中将控件从一种形式显示到另一种形式

来自分类Dev

将输入值从一种形式复制到另一种形式

来自分类Dev

将输入值从一种形式复制到另一种形式

来自分类Dev

在C#中将面板从一种形式复制到另一种形式

来自分类Dev

jQuery-将输入值从一种形式复制到另一种形式(形式和输入名称相同)

来自分类Dev

将信息从一种形式传递到另一种形式?

来自分类Dev

将数据从一种纹理复制到另一种-OpenGL

来自分类Dev

将数据从一种纹理复制到另一种-OpenGL

来自分类Dev

提交时如何将值从一种形式传递到另一种形式?

来自分类Dev

将html页面中的所有价格从一种货币更改为另一种货币?

来自分类Dev

将datagridview从一种形式传递到另一种c#

来自分类Dev

将值从一种模型传递到另一种模型的形式

来自分类Dev

如何以一种形式为所有TextBox控件设置Padding =“ 0”?

来自分类Dev

从另一种形式覆盖控件

来自分类Dev

以另一种形式改变控件的背景颜色

来自分类Dev

如何将变量从一种 qt 形式传递到另一种形式的 qt 形式?

来自分类Dev

Delphi-将变量传递到另一种形式(没有全局变量)

来自分类Dev

如何在 MS Access 中反映/复制从一种形式到另一种形式的更改

来自分类Dev

从一种形式的类继承到另一种形式的类

来自分类Dev

PHP从一种形式获取价值到另一种形式

来自分类Dev

如何执行从一种形式到另一种形式的更新查询

来自分类Dev

使用从一种形式到另一种形式的公共空隙

来自分类Dev

如何减少从一种形式到另一种形式的加载时间

来自分类Dev

.htaccess将所有http重定向到https,另一种方式

来自分类Dev

将javascript对象从一种形式转换为另一种形式

来自分类Dev

将DateTime格式从一种形式更改为另一种形式

来自分类Dev

将文本从一种形式转移到另一种形式

Related 相关文章

  1. 1

    在C#中将控件和变量的状态从一种形式复制到另一种形式

  2. 2

    如何将值从一种形式传递到另一种形式的动态创建的控件

  3. 3

    在Visual Basic 6中将控件从一种形式显示到另一种形式

  4. 4

    将输入值从一种形式复制到另一种形式

  5. 5

    将输入值从一种形式复制到另一种形式

  6. 6

    在C#中将面板从一种形式复制到另一种形式

  7. 7

    jQuery-将输入值从一种形式复制到另一种形式(形式和输入名称相同)

  8. 8

    将信息从一种形式传递到另一种形式?

  9. 9

    将数据从一种纹理复制到另一种-OpenGL

  10. 10

    将数据从一种纹理复制到另一种-OpenGL

  11. 11

    提交时如何将值从一种形式传递到另一种形式?

  12. 12

    将html页面中的所有价格从一种货币更改为另一种货币?

  13. 13

    将datagridview从一种形式传递到另一种c#

  14. 14

    将值从一种模型传递到另一种模型的形式

  15. 15

    如何以一种形式为所有TextBox控件设置Padding =“ 0”?

  16. 16

    从另一种形式覆盖控件

  17. 17

    以另一种形式改变控件的背景颜色

  18. 18

    如何将变量从一种 qt 形式传递到另一种形式的 qt 形式?

  19. 19

    Delphi-将变量传递到另一种形式(没有全局变量)

  20. 20

    如何在 MS Access 中反映/复制从一种形式到另一种形式的更改

  21. 21

    从一种形式的类继承到另一种形式的类

  22. 22

    PHP从一种形式获取价值到另一种形式

  23. 23

    如何执行从一种形式到另一种形式的更新查询

  24. 24

    使用从一种形式到另一种形式的公共空隙

  25. 25

    如何减少从一种形式到另一种形式的加载时间

  26. 26

    .htaccess将所有http重定向到https,另一种方式

  27. 27

    将javascript对象从一种形式转换为另一种形式

  28. 28

    将DateTime格式从一种形式更改为另一种形式

  29. 29

    将文本从一种形式转移到另一种形式

热门标签

归档