首页 > 解决方案 > 三个选项 - 根据输入和记录值启用/禁用

问题描述

我有一个表格,其中(除其他外)有三个旨在排他性的选项。

我希望一次只选择一个,但是当我最初设计这个时,我将它们分成三个单独的表列而不是一个,并使用一个选项组。主要是因为我也想要一份我正在处理的报告中的输出。不管怎样,当一个被选中时,另外两个去Enabled = False。我遇到的问题是当表单加载时(实际上是Form_Current()用来确保在“检查”之前加载记录),表单将禁用未选中的两个选项之一,但不会禁用另一个。这是一张图片:

示例1

这是我正在使用的代码:

Private Sub Form_Current()

    If Me.optDealerPay Then
        Me.optCustomerPay.Enabled = False
        Me.optNoTradeIn.Enabled = False
    Else
        Me.optCustomerPay.Enabled = True
        Me.optNoTradeIn.Enabled = True
    End If
    If Me.optCustomerPay Then
        Me.optDealerPay.Enabled = False
        Me.optNoTradeIn.Enabled = False
    Else
        Me.optDealerPay.Enabled = True
        Me.optNoTradeIn.Enabled = True
    End If

    If Me.optNoTradeIn Then
        Me.optDealerPay.Enabled = False
        Me.optCustomerPay.Enabled = False
    Else
        Me.optDealerPay.Enabled = True
        Me.optCustomerPay.Enabled = True
    End If
End Sub

除了重新设计表结构之外,还有什么更好的方法来实现这一点,如果可能的话,我真的想避免这种情况。AfterUpdate()三个选项中的每一个的过程都使用了类似的代码。

标签: ms-access

解决方案


您的代码将一个一个地执行每个 if 语句 - 这有点混乱。在设计模式下启用所有单选按钮并尝试以下代码:

Private Sub Form_Current()
    If Me.optDealerPay Then
        Me.optCustomerPay.Enabled = False
        Me.optNoTradeIn.Enabled = False
    ElseIf Me.optCustomerPay Then
        Me.optDealerPay.Enabled = False
        Me.optNoTradeIn.Enabled = False
    ElseIf Me.optNoTradeIn Then
        Me.optDealerPay.Enabled = False
        Me.optCustomerPay.Enabled = False
    Else
        ' Maybe you should do something if none of the options is true
    End If
End Sub

推荐阅读