2012-11-19 182 views
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... 

但是,我發現,醜陋的,而且有可能是我會想念控制。

似乎沒有超類,即使是支持該屬性的CheckBoxRadioButton。此外,試圖簡單設置control.Checked將不會編譯。

如果您好奇我在做什麼,我正在創建一個通用的表格,該表格將存儲指定控件的默認值。

+3

這是昂貴的,甚至可能是不正確的。例如'DateTimePicker'也有一個屬性['ShowCheckBox'](http://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker.showcheckbox(v = vs.80).aspx )。我會用你的「醜陋的」方法。 –

回答

3

如果你真要查所謂的Checked任何財產的存在,那麼你需要使用反射:

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

(請注意,這將拋出一個異常,如果Checked超載。)

但是,你真的只想保存DateTimePickerChecked財產嗎?看起來你正在尋找一個清單:

Private Shared ReadOnly CheckableTypes() As New HashSet(Of Type)({ 
    GetType(CheckBox), GetType(RadioButton), ... 
}) 
... 
If CheckableTypes.Contains(control.GetType()) Then 
+0

@TimSchmelter:我很困惑。 – Ryan

+0

列表的問題是,你仍然需要投入控件來設置'Checked'屬性 - 試圖簡單地使用'control.Checked'將不會編譯。我意識到我沒有在我的問題中明確包含問題的這一方面 - 將會解決。 – Hannele

+0

雖然我認爲你可以將控件作爲一個「Object」來施放......可能會造成性能問題? – Hannele