Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于自定义控件上的每个异常的VB.NET_Vb.net_Exception_Exception Handling_For Loop_Each - Fatal编程技术网

用于自定义控件上的每个异常的VB.NET

用于自定义控件上的每个异常的VB.NET,vb.net,exception,exception-handling,for-loop,each,Vb.net,Exception,Exception Handling,For Loop,Each,在VB.NET中,我有两个自定义控件,一个是文本框,另一个是组合框。 它们具有自定义值,如Bool_ishiden,并在运行时添加到表单中 现在,在代码中的某个点,我想检查_ishiden是否设置为True或False,并显示该信息。由于用户可以在创建控件时编辑这些值,因此在创建时不会设置这些值 所以我尝试的是: (所有这些都在MDI表单上) 现在。。如果第一个控件是自定义组合框,则会出现错误,因为它发现它与自定义文本框控件不匹配 我该怎么做?据我所知,它应该只检查上述表单上的所有控件,然后只检

在VB.NET中,我有两个自定义控件,一个是文本框,另一个是组合框。 它们具有自定义值,如Bool_ishiden,并在运行时添加到表单中

现在,在代码中的某个点,我想检查_ishiden是否设置为True或False,并显示该信息。由于用户可以在创建控件时编辑这些值,因此在创建时不会设置这些值

所以我尝试的是:

(所有这些都在MDI表单上)

现在。。如果第一个控件是自定义组合框,则会出现错误,因为它发现它与自定义文本框控件不匹配

我该怎么做?据我所知,它应该只检查上述表单上的所有控件,然后只检查那些与CustomTextBox控件匹配的控件

多谢各位

据我所知,它应该通过所有的控制 只需检查与CustomTextBox控件匹配的表单

恐怕那不对。您需要自己实施该检查,例如:

For Each cntrl as object in frm.Controls
    If TypeOf cntrl Is CustomTextBox Then
        With CType(cntrl, CustomTextBox)
            .DoSomethingWithControl()
            .DoSomethingElseWithControl()
        End With
    End If 
Next
据我所知,它应该通过所有的控制 只需检查与CustomTextBox控件匹配的表单

恐怕那不对。您需要自己实施该检查,例如:

For Each cntrl as object in frm.Controls
    If TypeOf cntrl Is CustomTextBox Then
        With CType(cntrl, CustomTextBox)
            .DoSomethingWithControl()
            .DoSomethingElseWithControl()
        End With
    End If 
Next

对于集合中的每个x As T
不会将集合项目筛选为
T
类型的项目。它尝试将
集合
中的每个项转换为
T
,如果失败,则抛出异常

因此,您有以下选项:

  • 例如,使用提供的代码自己进行检查

  • 或者,您可以先筛选列表,然后循环浏览项目。在这里,LINQ可以帮助:

    For Each cntrl In frm.Controls.OfType(Of CustomTextBox)()
        ... ' Do this for all CustomTextBoxes
    Next
    
    For Each cntrl In frm.Controls.OfType(Of CustomComboBox)()
        ... ' Do this for all CustomComboBoxes
    Next
    
    这里不需要
    As CustomTextBox
    子句,因为它返回一个
    IEnumerable(Of CustomTextBox)
    ,所以每个
    可以自己推断
    cntrl
    必须是
    CustomTextBox
    类型


  • 对于集合中的每个x As T
    不会将集合项目筛选为
    T
    类型的项目。它尝试将
    集合
    中的每个项转换为
    T
    ,如果失败,则抛出异常

    因此,您有以下选项:

  • 例如,使用提供的代码自己进行检查

  • 或者,您可以先筛选列表,然后循环浏览项目。在这里,LINQ可以帮助:

    For Each cntrl In frm.Controls.OfType(Of CustomTextBox)()
        ... ' Do this for all CustomTextBoxes
    Next
    
    For Each cntrl In frm.Controls.OfType(Of CustomComboBox)()
        ... ' Do this for all CustomComboBoxes
    Next
    
    这里不需要
    As CustomTextBox
    子句,因为它返回一个
    IEnumerable(Of CustomTextBox)
    ,所以每个
    可以自己推断
    cntrl
    必须是
    CustomTextBox
    类型