none
winform编程动态添加控件出错:ReadOnly controls collection RRS feed

  • 问题

  • 我自己建了一个组合控件,在组合控件的代码里有一个功能是动态添加按钮,需要添加80个按钮
             public void AddButton()
            {
                try
                {
                    for (int i = 1; i <= 8; i++)
                    {
                        Panel HG = (Panel)this.Controls[this.Controls.IndexOfKey("myPanel" + i.ToString())];//先找到容器控件,这个面板是直接从工具箱里面拖得
                        HG.Visible = true;
                        HG.Controls.Clear();//运行到这句出错ReadOnly controls collection

                        TableLayoutPanel tlp = new TableLayoutPanel();
                        tlp.Name = "tlpLayout" + i.ToString();
                        tlp.ColumnCount = 5;
                        tlp.RowCount = 2;
                        HG.Controls.Add(tlp);//运行到这句也出错
                        tlp.Dock = DockStyle.Fill;

                        for (int j = 1; j <= 10; j++)
                        {
                            Button lnButton = new Button();//创建按钮
                            lnButton.Name = "LiuNianButton" + i.ToString() + j.ToString();
                            lnButton.Size = new System.Drawing.Size(43, 43);
                            lnButton.Text= "2010";
                            tlp.Controls.Add(lnButton);
                        }
                    }
                }
    使用时
            public Test()//主界面的构造函数
            {
                InitializeComponent();
                dlControl = new myControls();//初始化我前面建的控件
                this.SplitContainer1.Panel1.Controls.Add(dlControl);
                dlControl.Dock = DockStyle.Fill;
                dlControl.AddButton();//调用上面的添加按钮函数,结果出错了ReadOnly controls collection
            }
    我尝试在用户控件的构造函数里面调用AddButton()还是会出现同样错误,在主界面和用户控件的Load事件里面也出现同样错误
            private void Test_Load(object sender, EventArgs e)
            {
                 dlControl = new myControls();//初始化我前面建的控件
                this.SplitContainer1.Panel1.Controls.Add(dlControl);
                dlControl.Dock = DockStyle.Fill;
                dlControl.AddButton();//调用上面的添加按钮函数,结果出错了ReadOnly controls collection
            }
    请问各位这个是什么原因造成的,有没有办法解决,我不想手动的拖动80个按钮进去,很麻烦,也不想将这个控件直接再主界面哪里实现,我还是希望把他做成一个组合控件,这样我就可以到处使用了。各位有没有什么建议,望指教!

    2010年1月25日 19:35

答案

  • 唉,真悲哀,真是我那个控件出问题,我没有仔细研究那个控件,他本身也是组合控件,不能直接当容器使用,应修改成GH.Panel.Controls.Clear()就行,是我错。

    • 已标记为答案 梦里人 2010年1月26日 5:51
    2010年1月26日 5:51

全部回复

  • 你的KHG是什么控件,估计就是这个控件的问题,
    你把他的READONLY设为false


    努力+方法=成功
    2010年1月26日 1:00
  • 你好,这个是我失误打错了,本来我是用了其他控件作为容器的,为了方便说明问题,我就把他改成Panel,但是下面的名字没改到。我想请教下怎么设置ReadOnly为false,我没有找到相应的方法或者是属性,望指教。
    2010年1月26日 3:46
  • 你好!
         请问你那个容器控件是什么?应该是他的Controls不支持改动!
    周雪峰
    2010年1月26日 5:44
    版主
  • 唉,真悲哀,真是我那个控件出问题,我没有仔细研究那个控件,他本身也是组合控件,不能直接当容器使用,应修改成GH.Panel.Controls.Clear()就行,是我错。

    • 已标记为答案 梦里人 2010年1月26日 5:51
    2010年1月26日 5:51