首页 > 解决方案 > 使用 ActiveControl 摆脱长行的 Else if 代码

问题描述

我知道有很多关于这个主题的帖子,但没有一个适合我的情况。我有一个带有 10 个选项卡的 TabControl1 的 Form1。在 8 个选项卡上,我有一个 UserControl。默认情况下,UserControl 的编号为 UserControl110、UserControl111、..UserControl117。我在 Form1 代码中使用 KeyDown 事件,它在 UserControl 类代码中启动子例程。例如 UserControl110.myPrint() 按预期工作。通过使用多行 Else If 代码(见下文),我得到了正确的 UserControl 来完成子例程。我认为您可以使用 ActiveControl 来获取正确的 UserControl 并用 myPrint() 点它并消除许多 Else If 代码行,但我尝试过的方法不起作用。很多 LINQ 代码也可以工作,但我对 LINQ 很陌生。

此代码有效...

        If UserControl110.Visible = True Then
            UserControl110.myPrint()
        ElseIf UserControl111.Visible = True Then
            UserControl111.myPrint()
        ElseIf UserControl112.Visible = True Then
            UserControl112.myPrint()
        ElseIf UserControl113.Visible = True Then
            UserControl113.myPrint()
        ElseIf UserControl114.Visible = True Then
            UserControl114.myPrint()
        ElseIf UserControl115.Visible = True Then
            UserControl115.myPrint()
        ElseIf UserControl116.Visible = True Then
            UserControl116.myPrint()
        ElseIf UserControl117.Visible = True Then
            UserControl117.myPrint()
        End If

但这并不

        Dim Ctrl As Control = Me.ActiveControl
             Ctrl.myPrint()

我已经展示了上面的代码,它可以工作,也可以不工作。

我希望 2 或 3 行代码将取代许多 Else If 代码行。

标签: vb.net

解决方案


我将代码更改为:

Public Sub PKey_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    If e.KeyData = (Keys.Control Or Keys.P) Then
        Dim Ctrl As Object = Me.ActiveControl
        Ctrl.myPrint()
    End If
End Sub

而且效果很好。减少了 20 行 Else If 代码。调用 Ctrl 一个对象而不是一个控件。


推荐阅读