我有两个RadioButton s:r1和r2。

我必须在Enabled = true上启用两者,并且仅在Enabled = false

上禁用未选中
public bool Enabled
{
  set
  {
    if(value)
    {
      r1.Enabled = value; // true
      r2.Enabled = value;
    }
    else
    {
      if(!r1.Checked)
      {
        r1.Enabled = value; // false if not checked
      }
      if(!r2.Checked)
      {
        r2.Enabled = value;
      }
    }
  }
}

我可以使用哪个运算符在一个字符串中写入每个条件?

有帮助吗?

解决方案

关键是当值为false且相应的复选框为 已选中 时,Enabled属性保持不变。所以试试这个:

public bool Enabled
{  
  set
  {  
     r1.Enabled = !r1.Checked? value: value || r1.Enabled;   
     r2.Enabled = !r2.Checked? value: value || r2.Enabled;   
  }
}

public bool Enabled
{  
  set 
  {  
      r1.Enabled = r1.Checked? value || r1.Enabled: value;   
      r2.Enabled = r2.Checked? value || r2.Enabled: value;   
  }
}

其他提示

以下内容类似于您正在做的事情,但您的原始代码中有一个未处理的案例:if((!value)<!> amp; <!> amp;(r1.Checked)) ,r1.Enabled永远不会设置(r2的条件相同)。如果将r1.Enabled和r2.Enabled设置为true(默认情况下为某处),则以下代码可能就足够了。

r1.Enabled = value || r1.Checked;
r2.Enabled = value || r2.checked;

如果你有奇怪的依赖,我没有看到任何特别干净......

我认为这很清楚:

public bool Enabled
{
  set
  {
    if (value || !r1.checked) {
      r1.Enabled = value;
    }
    if (value || !r2.checked) {
      r2.Enabled = value;
    }
  }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top