vb.net - 使用 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 代码行。
解决方案
我将代码更改为:
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 一个对象而不是一个控件。
推荐阅读
- typescript - 在 TypeScript 中返回 Union 的隐式类型
- python - IDLE python3.9中的If语句无法正常运行
- python - 来自单独数据库连接的 peewee 多进程“peewee.OperationalError:磁盘 I/O 错误”
- string - SAS如何根据字符串将观察分成多行?
- javascript - 如果未找到,则 JS 中的条件链接为 false
- javascript - 为什么 `({}+{}+{}*2).length` 在 Javascript 中返回 33?
- node.js - 如何使用 Nodemailer 提高发送带有大附件的邮件的速度
- python - 如何使用python获取opencv中检测到的区域的坐标
- python - 将字体从 URL 加载到 Pillow
- python - MNIST 数据集上的可变图像输入分辨率问题(使用 CNN 时)