Hola
en los cuales tengo 3 elementos
...De que elementos se tratan, o tenemos que adivinarlo xD?.
Bueno, como no has proporcionado la suficiente información te muestro mi solución en VB.NET, requiere el uso de Framework
4.0 3.5 por las extensiones LINQ:
Básicamente lo que tienes que hacer es recorrer la colección de controles del contenedor y comprobar la cantidad de esos controles que están "seleccionados" para "deshabilitar" el resto de controles.
Private CheckBoxes() As CheckBox
Private CheckIt As Boolean
Private Sub CheckBoxes_CheckedChanged(sender As Object, e As EventArgs) _
Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, _
CheckBox3.CheckedChanged, CheckBox4.CheckedChanged
CheckBoxes = Me.GroupBox1.Controls.OfType(Of CheckBox)().ToArray
Select Case CheckBoxes.Where(Function(x) x.Checked).Count
Case Is >= 2 : CheckIt = False
Case Is < 2 : CheckIt = True
End Select
For Each ctrl As CheckBox In CheckBoxes.Where(Function(x) Not x.Checked)
ctrl.Enabled = CheckIt
Next
CheckBoxes = Nothing
End Sub
Aquí tienes una traducción al vuelo para C#,
convierte el Switch a un par de IF's y te debería funcionar
si Checkeds es igual o mayor que 2...
Enable = false
si checkeds es menor que 2...
Enable = true
private void CheckBoxes_CheckedChanged(object sender, EventArgs e)
{
dynamic Controls = this.GroupBox1.Controls.OfType<CheckBox>();
dynamic Checkeds
= Controls
.Where(x
=> x
.Checked).Count; bool Enable = false;
switch (Checkeds) {
case // ERROR: Case labels with binary operators are unsupported : GreaterThanOrEqual
2:
Enable = false;
break;
case // ERROR: Case labels with binary operators are unsupported : LessThan
2:
Enable = true;
break;
}
foreach (CheckBox ctrl
in Controls
.Where(x
=> !x
.Checked)) { ctrl.Enabled = Enable;
}
}
//=======================================================
//Service provided by Telerik (www.telerik.com)
//Conversion powered by NRefactory.
//Twitter: @telerik
//Facebook: facebook.com/telerik
//=======================================================
Saludos!