使用 ActiveControl 去掉一长行 Else if 代码



我知道有很多关于这个主题的帖子,但没有一个适合我的情况。 我有一个带有 10 个选项卡的 TabControl1 的 Form1。在 8 个选项卡上,我有一个用户控件。默认情况下,用户控件的编号为 UserControl110、UserControl111,..用户控制117.我在 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 代码行。

我将代码更改为:

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 的对象而不是控件。

最新更新