Vb.net 检查动态创建的richtextbox是否未处于焦点

Vb.net 检查动态创建的richtextbox是否未处于焦点,vb.net,winforms,Vb.net,Winforms,如果正在创建字典程序。当使用“复制剪贴板上的某些文本”时,它将以系统上可见的形式给出复制文本的含义。我想在用户单击其屏幕上的任何位置时关闭表单。但如果用户想复制一些文本的含义从将不会关闭,我添加了一个以上的动态创建的RichTextBox在一个选项卡控件中,以显示一些含义。我的代码工作得很好。当用户滚动RichTextBox表单时,它会自动关闭。滚动条似乎不是richtextbox的一部分。帮我解决这个问题我的代码如下 Dim s As Boolean = True Private Sub T

如果正在创建字典程序。当使用“复制剪贴板上的某些文本”时,它将以系统上可见的形式给出复制文本的含义。我想在用户单击其屏幕上的任何位置时关闭表单。但如果用户想复制一些文本的含义从将不会关闭,我添加了一个以上的动态创建的RichTextBox在一个选项卡控件中,以显示一些含义。我的代码工作得很好。当用户滚动RichTextBox表单时,它会自动关闭。滚动条似乎不是richtextbox的一部分。帮我解决这个问题我的代码如下

Dim s As Boolean = True

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If MouseButtons.ToString = "Left" Or MouseButtons.ToString = "Right" Then
        If s = True Then
            If InStr(LCase(Me.ActiveControl.ToString), LCase("Label")) Then
                Me.Close()
            End If
        End If
    End If
End Sub

Private Sub Label1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Label1.Click
    Me.Close()
End Sub
Private Sub frmdict_MouseEnter(ByVal sender As Object, ByVal e As EventArgs) Handles Me.MouseEnter
    s = False
    Button1.Focus()
End Sub

Private Sub frmdict_MouseLeave(ByVal sender As Object, ByVal e As EventArgs) Handles Me.MouseLeave
    s = True
    Label1.Focus()
End Sub
==更新==

我有一个form1,其中包含将RichTextBox和选项卡添加到tabcontrl的代码

Dim myTabPage As New TabPage()
Dim myrichtext As New RichTextBox()
myrichtext.Name = "RichTextBox" & i
myTabPage.Text = StrSearch & i
frmdict.TabControl1.TabPages.Add(myTabPage)
myTabPage.Controls.Add(myrichtext)
myrichtext.RightToLeft = Windows.Forms.RightToLeft.No
myrichtext.Dock = DockStyle.Fill
myrichtext.Font = New Font("Urdulink", 14)
最后打开frmdict以显示意义

If frmdict.TabControl1.TabPages.Count > 0 Then
  frmdict.TabControl1.RightToLeftLayout = True
  frmdict.Show()
  frmdict.Label1.Focus()
  ' frmdict.TabControl1.Focus()
Else
  frmdict.Close()
End If

每当鼠标移动到窗体的一个子控件上时,
MouseLeave
就会触发,这可能不是您所期望的

我不确定你的标签和按钮是怎么回事,但像这样的东西可能会使它适合你:

If s = True Then
  If Not rtb1.Bounds.Contains(Me.PointToClient(Cursor.Position)) AndAlso _
     TypeOf Me.ActiveControl Is Label Then
    Me.Close()
  End If
End If
更新:

就动态富格文本控件而言,实际上不需要名称。类似的方法应该可以工作(未完全测试):


这是一个字典程序,我有多个动态创建的RichTextBox,所以我不知道它们的名称。并且它们都嵌入在tabl控件中,所以我无法获取它们的名称。@user934820您是说所有的RTF控件都在TableLayoutPanel控件中吗?
If TabControl1.SelectedTab IsNot Nothing Then
  For Each rtb As RichTextBox In TabControl1.SelectedTab.Controls.OfType(Of RichTextBox)()
    If Not rtb.Bounds.Contains(rtb.PointToClient(Cursor.Position)) Then
      Me.Close()
    End If
  Next
End If