2012-02-06 106 views
1

我有一个C#WinForm程序,实质上是一个美化的文本解析器。它需要一行十六进制数,并根据提供给我的规格将其转换为人类可读的信息。我有一个tabcontrol用于显示信息的多个标签页。这些标签中的几个标签是相同的,但是需要基于解析出的文本行在不同的标签上,如果该行是'A'类型的,则它显示标签'A'上的信息,如果它是'B'类型的,它显示在标签'B'等。跨多个标签页重复使用控件(即文本框)

我开始注意到这个问题,我有很多文本框和其他控件跨越所有这些标签页,我相信它会影响性能。我相信我现在已经在150多个文本框的范围内,关于相同的复选框等等。

我的问题是,有没有一种方法可以在多个标签页上重复使用一页控件,并让它们根据标签显示不同的信息,所以我可以减少100多个控件并简化程序本身?

回答

1

阅读所添加的部分,更清晰一点,因为我漫无目的。

有几种方法可以在体系结构上解决这个问题。基本的概念就是不再将“标签页”看作是一种物理概念,并且从逻辑上开始思考它。作为一个合乎逻辑的概念,在您的实现中,选项卡页面是一组控件,其中一些是独特的,其中一些是常见的(或者对于多个选项卡通用)。

在纯动态系统中,您可以填写“控件”并动态绘制,具体取决于用户点击哪个“标签”。这意味着你并不需要使用选项卡控件。而是根据显示给用户的信息绘制“标签页”。

另一种选择是保留已经布置在“标签页”上的唯一“控件”,并将可以添加到非唯一控件中的容器保留为。这需要一些计划来确定哪些控件需要显示在哪个页面上,以及静态布局(控件放置在选项卡上)和动态交织方式。换句话说,一点计划可以为你节省很多的痛苦。

无论采用哪种方式,无论使用多少“标签页”,都需要填充一次控件。

补充:因为这是winforms,所以你必须稍微改变一下你的思维范式。如果你是一个webforms开发者,你已经考虑过容器。

一个选项是制表符的策略模式。该策略包含在页面上绘制“标签页”及其位置和大小所需的控件。当一个人点击一个标签时,你会进入“存储桶控制”并根据所使用的“标签”(策略)动态添加。您甚至可以将标签页传递给策略,并将其动态地绘制在那里。

整个答案的要点是做一次工作,然后根据需要显示。

+0

我很感激你的意见。谢谢! – Leaddore 2012-02-07 15:56:54

0

我不认为你可以重新使用这样的控件,但你可以肯定地创建控件时,第一次显示选项卡,而不是一次。

+0

控件最终是一个类(一个对象),因此您可以控制它的使用方式以及它如何显示给用户。在标签页的约束条件下,这有点困难,但是您可以动态地将控件添加到页面(马虎)或其他类型的容器(整洁者,如面板,标签页等)。 WinForms使这有点棘手,因为一般的WinForms开发人员并不像Web开发人员那样想。:-) – 2012-02-06 18:33:13