复杂的.Net 2.0 Windows窗体控件:从哪里开始?

Dav*_*eer 5 user-controls .net-2.0 winforms

为了为我正在研究的.Net 2.0 Winforms应用程序创建一个方便的用户界面,我需要一个控件,我非常肯定超出了任何标准控件的"开箱即用"行为.我正在努力实现的模拟如下:

小样http://www.claware.com/images/temp/mockup.png

本质上,应用程序的这一部分试图将单词语言解析成音节(没有字典可以引用;任何和所有unicode字符都是可能的.)当用户到达目的地时,他已经定义了元音/辅音.他的语言和其他一些配置.然后有一个迭代过程:(1)应用程序根据一些规则猜测语言中存在哪些音节,(2)用户优化猜测,选择正确的解析或手动解析单词,(3)应用程序"学习"从用户的反馈中做出更明智的猜测,(4)重复,直到数据"足够好"继续前进.

控件需要呈现每个单词(灰色标题),然后是所有音节中断猜测(白色区域用点分隔单词的部分.)还有一种方法可以手动输入解析,这将显示文本区域和保存按钮(位于模型的底部.)当用户将鼠标悬停在猜测位置时,背景会发生变化,并显示"接受/拒绝"按钮.单击"接受"或输入手动解析,将从列表中删除整个单词.单击拒绝按钮仅删除该项目.

我绝不是100%以上我的格式出售,但我认为你可以大致了解我需要的格式和功能控制的类型.控件也将垂直滚动 - 最初可能有数千个单词.

我对你有经验的WinForms开发人员的问题是:从哪里开始?我真的非常希望保留在.Net核心框架内并扩展现有控件而不是第三方控件.(冒着开始宗教战争的风险:是的,我患有NIH综合症,但这是基于许多快速解决方案的有意识的决定,但是第三方控制的长期问题.)我在哪里可以获得最多"为我的bucK爆炸"并且至少重新发明轮子?列表显示?列表框?ScrollableControl?我是否需要一直回到控制并手动绘制所有内容?我感谢任何可以提供的帮助!

[编辑]感谢大家的想法.对我来说,最优雅的解决方案似乎是创建一个由FlowLayoutPanel和VScrollBar组成的自定义控件.FlowLayoutPanel可以包含用于每个单词的自定义控件的实例.但FlowLayoutPanel是虚拟的,即它只包含那些可见的实例(以及一些"刚刚滚动").VScrollBar事件确定需要加载的内容.写一些代码,但不是太糟糕,似乎运行良好.

Chr*_*ter 4

我会查看 TableLayoutPanel 和 FlowLayoutPanel 控件。这些将使您能够以垂直方式轻松地组织一系列控件。然后我将创建一个由一个标签和 2 个按钮组成的 UserControl。UserControl 将公开诸如文本之类的属性以及为单击按钮而公开的事件。对于列表中的每个条目,您将创建 UserControl 的一个实例,分配文本值并处理单击事件。该实例将以正确的顺序放置在“表/流”面板中。这两个布局面板都允许在其他项目之间插入项目,以便您可以动态地从列表中添加/删除项目。

编辑:考虑到您尝试渲染的内容的长度,我会考虑使用 DataGridView 并进行一些自定义渲染,以使其按照您希望的方式工作。使用 DGV 的渲染事件,您可以合并列、更改背景颜色(例如突出显示深灰色线条)、打开/关闭按钮以及将网格更改为行的编辑模式,以允许修改或插入新值。此方法可以轻松处理大型数据集,并且您可以非常轻松地直接绑定到它们。