. net Winforms项目,具有复杂的GUI和字段之间的约束

本文关键字:GUI 之间 约束 字段 复杂 项目 Winforms net | 更新日期: 2023-09-27 17:51:09

我在一家修理东西的公司工作,每次他们修理东西时,他们都要在一张纸上填满到处都是表格和成吨的字段。
现在他们想摆脱纸张,他们需要一个应用程序来取代整个东西,并将结果存储在数据库中。为此,我必须使用c#与。net和Windows Forms。
现在的问题是:在这个表单中有一些组合框,其值会影响其他控件的行为。例如,如果ComboBox1有Value1,则ComboBox2可选择的值将是Value2, Value3, Value6,…
还要考虑这个:

╔════╦════════╗
║ OK ║ Not OK ║
╠════╬════════╬═════════════════════════════════════════════════════════╗
║    ║        ║ Measure 1 : ....... (threshold for Value1 : > 180cd/m²) ║
║ ∙  ║   ∘    ║                     (threshold for Value2 : > 130cd/m²) ║
║    ║        ║ Measure 2 : ....... (threshold for Value3 : > 100cd/m²) ║
╚════╩════════╩═════════════════════════════════════════════════════════╝ 

"OK"answers"Not OK"下面的单元格是RadioButtons。直到现在(在纸上),它们都是根据测量1和2的值手工检查的。现在这是一个Winforms应用程序,它们必须被自动检查以降低出错的几率。我不认为我有很多问题与管理,只是通过解析字符串值和比较它们的阈值。真正混乱的地方是,如图所示,阈值并不总是相同的,并且随着上述组合框的值而变化。

这听起来很简单,如果它只是这样的话,它确实很重,因为它涉及到很多控件。
我想知道什么是最优雅的有效的方法来管理控件之间的所有这些约束。


我想到了什么

艰难的方式:
回调。每当值在某个地方发生变化时,就会调用一个函数,它会做一些事情来更新表单。这意味着控件之间有很多依赖关系,除非你想重写整个应用程序,否则几乎不可能进行改进。

最简单的方法:
数据库将存储关于约束的几乎所有内容,每当有重要更改时,通过数据库快速检查将允许您知道要更新哪些控件以及要更新其中的内容。我不确定我是如何看到这个RadioButton和阈值的东西,但例如,这将做的伎俩ComboxBox2的可用值被ComboBox1的值选择:

╔═════════════╗ ╔═══════════════════════╗
║ CB1_VALUES  ║ ║      CB2_VALUES       ║
╠═════════════╣ ╠═══════════╦═══════════╣
║ Values      ║ ║ CB1Values ║ CB2Values ║
╠═════════════╣ ╠═══════════╬═══════════╣
║ Value1      ║ ║ Value1    ║ Value4    ║
║ Value2      ║ ║ Value1    ║ Value5    ║
║ Value3      ║ ║ Value1    ║ Value6    ║
╚═════════════╝ ║ Value2    ║ Value7    ║
                ║ Value2    ║ Value8    ║
                ║ Value3    ║ Value3    ║
                ║ Value3    ║ Value6    ║
                ║ Value3    ║ Value9    ║
                ╚═══════════╩═══════════╝

执行"SELECT CB2Values FROM CB2_VALUES WHERE CB1Values = Value1"和boom,这是当ComboBox1 = Value1时ComboBox2的可用值。
所以在这种情况下,我认为这是一个相当好的主意,但我不知道它对阈值有什么帮助,我也不能想出另一个主意…

任何帮助将不胜感激!:)

. net Winforms项目,具有复杂的GUI和字段之间的约束

问题是配置应该是声明式的还是命令式的。

在我的理解中,你要写一个小型的ERP来管理物品,它们的状态,仓库的可用性等等。在这种情况下,我宁愿寻找在DB中保存状态信息,以避免2个不同的信息源(数据和配置)。

在任何情况下都需要在DB中存储项状态,所以让我们在那里存储also控件状态。控件状态对你的应用来说是至关重要的,因为它决定了你的应用是否健康。大多数用户不会使用SQL查询数据库,而是使用界面。

最好在DB端有存储过程,在每次提交数据或状态更改时检查状态的触发器。这是一种通常遵循像SAP这样的巨人的方法,但也可能适用于像你这样的小案例。