一種の「次へ」ボタンを有効にするために、ユーザーが ListCheckBox で指定されたオプションの少なくとも 1 つのオプションをクリックする必要があるフォームを実行しようとしています。
ただし、オプションが選択されていないときにボタンが有効になる場合があるため、期待どおりに機能しません。
これは、検証を行うクラスのコードです。
class CampoCheckedListBox : AbstractCampo
{
private CheckedListBox checkedListBox { get; set; }
private string nombre { get; set; }
private bool obligatorio { get; set; }
public CampoCheckedListBox(string nom, CheckedListBox controller, bool oblig)
{
this.checkedListBox = controller;
this.nombre = nom;
this.obligatorio = oblig;
}
public override void validar()
{
string mensaje = "";
if (this.obligatorio && checkedListBox.CheckedItems.Count==0)
{
mensaje += "-Seleccione al menos una de las opciones de " + this.nombre + "." + Environment.NewLine;
throw new ValidationException(mensaje);
}
}
}
私のフォームでは:
private void validarCampos()
{
List<AbstractCampo> campos = new List<AbstractCampo>();
campos.Add(new Campo("Nombre", tBoxRol.Text, true, Controller.TipoValidacion.Alfanumerico));
campos.Add(new CampoCheckedListBox("Funcionalidades", chkBoxFuncionalidades, true));
try
{
Controller.validarCampos(campos);
darAlta_button.Enabled = true;
errorBox.Text = "";
}
catch (ValidationException vEx)
{
errorBox.Text = vEx.mensaje;
darAlta_button.Enabled = false;
}
}
Controller.validarCampos() は、リストから各オブジェクトを取得し、メッセージvalidar() を送信するだけです。そして、ListCheckBox の SelectedIndexChanged イベントで、この validarCampos() を呼び出します。
オプションをチェックしてもボタンが有効にならないことがあります。しかし、同じオプションのチェックを外してからもう一度チェックすると、ボタンが有効になります。
私はここでかなり迷っています...