2009-12-01 79 views
0

我试图想出一个非常简单的方法来存储一个布尔值在tabcontrol中的每个tabpage。每个页面都有一个文本框,并且我想存储一个bool foreach页面,所以如果tabpage 1已经保存,那么bool1设置为true,否则为false,依此类推。列表?字典?阵列?

然后当他们去关闭程序时,它会遍历所有的标签页,看看每个标签页是否已经保存。我需要能够创建一些我可以搜索和操作的列表。

我以前使用过标签属性,但由于某些原因不能正常工作了。

任何帮助的建议是greatl; Y赞赏:)

谢谢你,

巴尔。

+2

标签问题究竟是什么? – 2009-12-01 08:51:14

+0

如果Tag属性为空,它通常会说没有设置为对象的实例,并且即使它有时不是null也是如此。我从没有做过和以前一样工作的事情,所以我很困惑。 – 2009-12-01 09:09:07

+0

在更改代码之前,您应该了解该错误。如果您不确定发生了什么,请使用调试器并仔细检查。如果你得到一个NullReferenceException,那么某个地方**真的被设置为null。 – Groo 2009-12-01 09:44:01

回答

4

数组,列表或字典都不是用于跟踪一组对象的布尔状态的正确数据结构。这样做的结构只不过是HashSet<T>。或者T在集合中,或者不是。

它优于Dictionary<T, bool>,因为它实际上维护着两个状态:对象是否在字典中,如果是,它的值是true还是false。

它优于List<T>有两个原因:它更快(尽管在你的情况中,几乎肯定会忽略不计),并且这并不意味着它包含的对象的顺序有一些意义,因为对象在HashSet<T>中的顺序是任意的。

+0

我同意你关于'字典'和'HashSet ',但我发现答案有点误导一见钟情 - - 即我总是比较喜欢'Dictionary 'HashSet ',因为它会给我一个选项,可以在将来每页上附加任何数据**或功能**。 – Groo 2009-12-01 09:32:58

+0

选择'HashSet '是YAGNI的行动。 – 2009-12-01 14:39:58

4

您可以使用例如Dictionary<TabPage,bool>。在您的应用程序的启动:

var pageStates=new Dictionary<TabPage,bool>(); 

foreach(var page in tabControl.TabPages) { 
    pageStates.Add(page, false); 
} 

要更改的TabPage的状态:

pageStates[page]=true; 

当你的应用程序结束:

foreach(var page in TabControl.TabPages) { 
    if(pageStates[page]) { 
     //The page is saved 
    } 
} 
+0

非常感谢您的帮助,也花时间提供代码示例以及:) – 2009-12-01 09:16:07

4

List<TabPage>

商店只有那些需要保存的页面。如果为空,则不需要保存。

1

如果您正在迭代而不移除或添加元素,请使用该数组。

如果您正在迭代,但添加和删除元素使用列表。

如果您使用字符串作为键,然后使用字典。

该词典具有非常快的查找性能,与列表相比,元素数量多。