1

それをサポートする未指定の Windows コントロールの Checked 属性を確認して設定する方法はありますか?

もちろん、力ずくの方法もあります。

If TypeOf (control) Is Windows.Forms.CheckBox Then
    Dim chk As Windows.Forms.CheckBox = control
    chk.Checked = Boolean.Parse(sText)
ElseIf TypeOf (control) Is Windows.Forms.RadioButton Then
    Dim rdo As Windows.Forms.RadioButton = control
    rdo.Checked = Boolean.Parse(sText)
ElseIf TypeOf (control) Is Windows.Forms.DateTimePicker Then
    Dim dte As Windows.Forms.DateTimePicker = control
    dte.Checked = Boolean.Parse(sText)
etc...

しかし、私はそれが醜いと思います。見逃すコントロールがあるかもしれません。

属性をサポートするCheckBoxおよびであっても、スーパークラスはないようです。RadioButtonまた、単純に設定しようとしてcontrol.Checkedもコンパイルされません。

私が何をしようとしているのか知りたい場合は、名前付きコントロールのデフォルト値を格納する汎用テーブルを作成しようとしています。

4

1 に答える 1

3

と呼ばれるプロパティの存在を本当に確認したい場合はChecked、リフレクションを使用する必要があります。

control.GetType().GetProperty("Checked") IsNot Nothing

( がオーバーロードされている場合、これは例外をスローすることに注意してくださいChecked。)

Checkedしかし、本当にa のプロパティだけを保存したいDateTimePickerですか? リストを探しているようです:

Private Shared ReadOnly CheckableTypes() As New HashSet(Of Type)({
    GetType(CheckBox), GetType(RadioButton), ...
})
...
If CheckableTypes.Contains(control.GetType()) Then
于 2012-11-19T15:07:39.767 に答える