gpt4 book ai didi

c# - Control.ControlCollection 问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:14 26 4
gpt4 key购买 nike

我正在使用 Microsoft Visual Studio Express 2010开发 Windows 窗体应用程序 (C#)

我被以下内容迷惑了:

我创建了一个类来组织我的数据

namespace Project_Management_Wizard {
public class dataStorage {
public System.Windows.Forms.Control wizard_tabs;

}
}

然后我把数据放进去

data.wizard_tabs = new Wizard_Tabs().Controls[0];

Wizard_Tabs 是一种具有一个控件的窗体 - System.Windows.Forms.Tab.Control

现在,基本上,data.wizard_tabs 是一个 Tab.Control,它有几个包含内容的选项卡。

然后我获取这些内容并将它们放在另一个表单中。

这有助于我组织表单内容。

我做的是

   for(int I=0; I < data.wizard_tabs.Controls[Page].Controls.Count; I += 1) {
this.Controls.Add(data.wizard_tabs.Controls[0].Controls[I]);
}

基本上,这会遍历页面的内容并将页面中的每个元素添加到我正在使用的表单中。

基本上,这应该使我正在处理的表单成为选项卡的内容。

但是,我遇到了一个奇怪的问题。

上面的 Controls.Count 返回“5”,而我在选项卡上恰好有 5 个元素,所以这是正确的。

我有两个标签和三个组合框。

但是,当循环运行时,它添加了元素 0、2、4;并跳过 1、3。我仔细查了一下,Controls[1]、Controls[3]里面什么都没有。它基本上跳过每第二个元素。

为了演示这一点,我在底部添加了一堆标签。这是我存储表单内容的向导选项卡:

![在此处输入图片描述][1]

而上面的代码执行完后是这样的:

![在此处输入图片描述][2]

您可以清楚地看到,每个第二个元素都被“跳过”了。

关于如何使 C# 为我提供选项卡中的内容,而不出于某种原因跳过每个第二个元素的任何提示?

我将 TabControl 的内容数据存储为 Control.ControlCollection。

我目前正在尝试弄清楚是否是在保存数据或生成表单等过程中出现的问题。如果我弄清楚了,我会在此处进行编辑。


测试:

this.Controls.Add(data.wizard_tabs);

成功将完整的选项卡控件及其中的所有内容添加到表单。

this.Controls.Add(data.wizard_tabs.Controls[0].Controls[0]);

成功地将元素 #0 从选项卡添加到表单。

        this.Controls.Add(data.wizard_tabs.Controls[0].Controls[0]);
this.Controls.Add(data.wizard_tabs.Controls[0].Controls[1]);
this.Controls.Add(data.wizard_tabs.Controls[0].Controls[2]);
this.Controls.Add(data.wizard_tabs.Controls[0].Controls[3]);
this.Controls.Add(data.wizard_tabs.Controls[0].Controls[4]);

似乎给了我每一个第二个元素。

不知何故,在访问选项卡的内容后,每第二个控件都会被删除。

尽管控件给我的计数是 9,这是选项卡中的所有元素,但尝试访问它们时会出现索引错误。

如果有 9 个元素,您会期望 [0][3]...[8]在那里,但是 [5]..[8]不存在。


    for(int I=data.wizard_tabs.Controls[Page].Controls.Count-1; I >= 0; I -= 1) {
this.Controls.Add(data.wizard_tabs.Controls[0].Controls[I]);
}

似乎已经解决了这个问题,而且 this.ControlsAdd() 似乎以某种方式弄乱了它自己。

非常感谢!

但现在我正在寻找一种相对简单的方法。

我有一个要显示为 data.wizard_tabs.Controls[0].Controls 的 ControlCollection

那么有没有明确的方法“this.Controls = data.wizard_tabs.Controls[0].Controls”?


            for(int I=0; I < 9; I += 1) {
this.Controls.Add(data.wizard_tabs.Controls[0].Controls[0]);
}

这似乎也能完成这项工作。

显然,Controls.Add(control) 将控件添加到当前元素并删除从它正在读取的源中的控件,折叠它从中获取元素的集合。

我不知道为什么完全没有记录它会这样做,也不知道为什么需要这样做。

最佳答案

显然,Controls.Add(control) 将控件添加到当前元素并从它正在读取它的源中删除控件,折叠它从中获取元素的集合。

我不知道为什么完全没有记录它会这样做,也不知道为什么需要这样做。

解决问题并清晰演示的代码是:

    for(int I=0; I < 9; I += 1) {
this.Controls.Add(data.wizard_tabs.Controls[0].Controls[0]);
}

关于c# - Control.ControlCollection 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20872037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com