代码之家  ›  专栏  ›  技术社区  ›  Thomas Carlton

如何检查窗体是否有焦点?

  •  0
  • Thomas Carlton  · 技术社区  · 7 年前

    我有两个 WinForm MainForm ChildForm .

    我想说的是 主窗体 子型 应始终可见,并且 主窗体 失去焦点 子型 子型

    这是我的密码:

    AddHandler Me.MainForm.Activated, Sub()        
                                          Me.ChildForm.Show()                                              
                                      End Sub
    
    AddHandler Me.MainForm.Deactivate, Sub()                                               
                                           If Not Me.ChildForm.Focused Then                                                   
                                               Me.ChildForm.Hide()
                                           End If
                                       End Sub
    
    AddHandler Me.ChildForm.Deactivate, Sub()
                                            If Not MainForm.Focused Then
                                                Me.ChildForm.Hide()
                                            End If
                                        End Sub
    

    有谁知道如何做到这一点吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Han    7 年前

    不确定这是否是一个好的方法,但是这个想法是使用MainForm和ChildForm活动状态的标志。这些标志是在触发MainForm和ChildForm的Activated和Deactive事件时设置的。为了简单起见,我将使用一个模块来存储标志和ChildForm的实例。然后在MainForm、Form1和Form2 Activated事件中调用SetChildVisible()方法。将启动对象设置为MainForm。

    模块1

    Module Module1
    
        Public FChild As ChildForm
    
        Public FMainActive As Boolean
        Public FChildActive As Boolean
    
        Public Sub SetChildVisible()
            FChild.Visible = Not FChildActive And FMainActive
        End Sub
    
    End Module
    

    Public Class MainForm
    
        Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim f1 = New Form1
            Dim f2 = New Form2
            Dim child = New ChildForm
    
            Module1.FChild = child
    
            child.Show()
            f1.Show()
            f2.Show()
        End Sub
    
        Private Sub MainForm_Activated(sender As Object, e As EventArgs) Handles MyBase.Activated
            Module1.FMainActive = True
            Module1.SetChildVisible()
        End Sub
    
        Private Sub MainForm_Deactivate(sender As Object, e As EventArgs) Handles MyBase.Deactivate
            Module1.FMainActive = False
        End Sub
    
    End Class
    

    Public Class ChildForm
    
        Private Sub ChildForm_Activated(sender As Object, e As EventArgs) Handles MyBase.Activated
            Module1.FChildActive = True
        End Sub
    
        Private Sub ChildForm_Deactivate(sender As Object, e As EventArgs) Handles MyBase.Deactivate
            Module1.FChildActive = False
        End Sub
    
    End Class
    

    表格1

    Public Class Form1
    
        Private Sub Form1_Activated(sender As Object, e As EventArgs) Handles MyBase.Activated
            Module1.SetChildVisible()
        End Sub
    
    End Class
    

    表格2

    Public Class Form2
    
        Private Sub Form2_Activated(sender As Object, e As EventArgs) Handles MyBase.Activated
            Module1.SetChildVisible()
        End Sub
    
    End Class