0

多くのドロップダウン リスト ボックスがオンになっているフォームがあります。それぞれの値に基づいてテーブルの行を表示または非表示にしてから、その行に含まれるテキスト ボックスに必須のフィールド バリデーターを追加します。各ドロップダウン リストの selectedindexchanged イベントでこれを実行しています。コードは以下のとおりです。

Protected Sub cbOffCover_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbOffCover.SelectedIndexChanged

    If cbOffCover.SelectedValue = "N" Then
        OffCoverRow.Visible = True
        Dim rfOffcover As RequiredFieldValidator = New RequiredFieldValidator
        With rfOffcover
            .ControlToValidate = txtOffCover.ID
            .SetFocusOnError = True
            .ErrorMessage = "*"
            .ForeColor = System.Drawing.Color.Red
        End With
        OffCoverCell.Controls.Add(rfOffcover)
    Else
        OffCoverRow.Visible = False
        Dim c As Control
        For Each c In OffCoverCell.Controls
            If c.ID = "rfOffCover" Then
                OffCoverCell.Controls.Remove(c)
            End If
        Next c
    End If

End Sub

次に、ドロップダウン リストごとにこのコードを再利用して、別の名前の行を表示/非表示にし、別のテキスト ボックスに検証を適用します。

私の質問は、これを行うより良い方法はありますか? 正確な方法はわかりませんが、ドロップダウンリストごとにこれほど多くのコードを何度も書く(またはコピー/貼り付ける)必要はないと思います。作業を行う関数/クラスを作成することは可能ですか?代わりにそれを呼び出すことができますか? 基本的なように見えるかもしれませんが、私はasp/vbが初めてです。どうもありがとう

4

1 に答える 1

2

ブール値を返す関数に入れることができます。関数を呼び出すときは、コンボボックス自体と、検証する値を渡します。一致する場合は true を返します。次のようなことを試してください:

Public Function ValidateComboBox(someComboBox as ComboBox, expectedValue as String)
  Dim result as Boolean = False
  If someComboBox.SelectedValue = expectedValue Then
        result = True
        OffCoverRow.Visible = True
        Dim rfOffcover As RequiredFieldValidator = New RequiredFieldValidator
        With rfOffcover
            .ControlToValidate = txtOffCover.ID
            .SetFocusOnError = True
            .ErrorMessage = "*"
            .ForeColor = System.Drawing.Color.Red
        End With
        OffCoverCell.Controls.Add(rfOffcover)
  Else
        OffCoverRow.Visible = False
        Dim c As Control
        For Each c In OffCoverCell.Controls
            If c.ID = "rfOffCover" Then
                OffCoverCell.Controls.Remove(c)
            End If
        Next c
  End If

  Return result

End Function

もちろん、必要に応じて変更してください。おそらく、値を返すだけで、コントロールの SelectedIndexChanged メソッド内で他の処理を行うことができます。

于 2013-07-17T13:00:53.677 に答える