仅允许选中一个复选框

时间:2019-01-17 21:32:31

标签: c# xamarin.forms

我有两个复选框,我希望它们开始处于未选中状态。但是如果选择一个,然后选择改变主意并选择另一个框,则前一个将未被选中。到目前为止,我的代码在下面,我是如此接近。但是,当我运行我的应用程序时,如果选择一个,它们都会打开或关闭。请帮忙。

    private void customer_IsCheckedChanged(object sender, EventArgs e)
    {
        if (business.IsChecked == true)
        {
            business.IsChecked = !customer.IsChecked;
        }

        if (business.IsChecked == false)
        {
            business.IsChecked = !customer.IsChecked;
        }

    }

    private void business_IsCheckedChanged(object sender, EventArgs e)
    {
        if (customer.IsChecked == true)
        {
           customer.IsChecked = !business.IsChecked;
        }

        if (customer.IsChecked == false)
        {
            customer.IsChecked = !business.IsChecked;
        }
    }

3 个答案:

答案 0 :(得分:2)

您需要再仔细考虑一下代码逻辑。例如:

private void customer_IsCheckedChanged(object sender, EventArgs e)
{
    if (business.IsChecked == true)
    {
        business.IsChecked = !customer.IsChecked;
    }

    if (business.IsChecked == false)
    {
        business.IsChecked = !customer.IsChecked;
    }

}

与以下内容完全相同:

private void customer_IsCheckedChanged(object sender, EventArgs e)
{
    business.IsChecked = !customer.IsChecked;
}

无论business.IsChecked的值如何,您总是将!customer.IsChecked的值更改为business.IsChecked

还请记住,您的行为与您描述的行为略有不同。即使您将逻辑改正为上述情况。如果您检查客户,则业务应保持未检查状态,但是如果您取消客户,则将检查业务。您所描述的只是您要取消业务就取消客户。也许行为是正确的,但这不是您所描述的。

如果我所描述的不是您想要的,则仅应在控件更改更改为true时实现此逻辑:

private void customer_IsCheckedChanged(object sender, EventArgs e)
{
    if(customer.IsChecked)
        business.IsChecked = false;
}

关于为什么会出现这种情况。我怀疑这是您的问题:If one checkbox is checked, set the other to unchecked,可能更改为check_clicked而不是check_changed,所以您不会触发自己的结果处理程序。

答案 1 :(得分:0)

如果您知道如何使用NuGet软件包管理器,则可以使用XLabs插件https://www.nuget.org/packages/XLabs.Forms/2.0.5782。它具有单选按钮。

答案 2 :(得分:0)

我建议稍微简化一下代码。应该解决问题。

private void customer_IsCheckedChanged(object sender, EventArgs e)
{
    if (customer.IsChecked)
    {
        business.IsChecked = false;
    }
}

private void business_IsCheckedChanged(object sender, EventArgs e)
{
    if (business.IsChecked)
    {
        customer.IsChecked = false;
    }
}