多选

时间:2012-01-25 09:37:05

标签: delphi selection

我正在尝试给用户选择组8个复选框(CheckBox1,CheckBox2,...等),用户可以从八个复选框中选择任意组合。对于每个选择,将有不同的编码 例如

If CheckBox1.checked then
Begin
End
Else
If CheckBox1.checked  and CheckBox2 .checked  then
Begin

End 
Else
If….

除了通过在我的案例中非常嵌套的If - else语句之外,请对如何做到这一点提出任何想法,我对此感到困惑 谢谢

更新

好的,让我澄清一下。我正在建立人力资源系统 - 续约合同流程,用户可以选择仅更新员工合同,或者续订并给予年度奖金,或者通过续订更改职位,或者通过年度加薪提供额外奖金......这就是逻辑,我不知道实现它的最佳方式是什么。

2 个答案:

答案 0 :(得分:1)

当选项彼此独立时,通常使用一组复选框。这意味着您的逻辑通常不是嵌套的。它看起来像这样:

if checkbox1.Checked then
  ....
else
  ....;

if checkbox2.Checked then
  ....
else
  ....;

等等。

如果复选框的含义之间存在强烈的相互作用,则会使问题复杂化。如果没有更详细的具体问题,建议你很难。但是,像这样的问题的良好解决方案通常涉及找到消除代码中的相互依赖性的方法,并使得可以使用如上所述的独立逻辑。


您的更新问题提供了更多信息。你说:

  

用户可以选择仅更新员工的合同,或者续订并给予年度奖金,或者通过续订更改职位,或者通过年度加薪提供额外奖金

这听起来像是一个互相排斥的选项列表。在这种情况下,一组复选框是错误的UI元素。您应该使用广播组TRadioGroup。这是一组单选按钮,其中只能选择一个。然后可以将其映射到枚举类型,并且您的逻辑可以成为一个简单的case语句。

如果使用复选框实现此UI,则用户可以选择不可能的选项组合。例如,他们可以选择给员工加薪的选项,但不检查续订合同的选项!

当然,您的一些选择可能是相互排斥的,有些可能是相互独立的。在这种情况下,您需要使用无线电组和一些复选框的组合。

答案 1 :(得分:0)

我会将逻辑分成多个组。在主GroupBox上,只需要Renew CheckBox(以及您需要的其他任何非续订选项)。然后有第二个GroupBox,其中包含Give Annual Bonus,Change Job Title和Give Extra Bonus with Raise的选项。选中Renew CheckBox后,显示第二个GroupBox。取消选中Renew CheckBox时,隐藏第二个GroupBox。这将为用户提供更少的选项,并确保用户只能选择对您的要求有效的组合。