2012-05-08 3 views
0

при создании словарной программы. при использовании копирования текста в буфер обмена он будет давать значения скопированного текста в форме, видимой в системе. Я хочу закрыть форму, когда пользователь нажимает любое место на своем экране. но если пользователь хочет скопировать некоторый текст из значений из не будет закрыт, я добавил больше, чем один динамически созданный richtextboxes в элементе управления вкладкой, чтобы показать количество значений. мой код отлично работает, если пользователь прокрутит форму richtextboxes, закроется сама. похоже, полосы прокрутки не являются частью 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, который содержит этот код для добавления richtextboxes и вкладки в 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 

ответ

0

Ваш 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 

Update:

С точки зрения вашей динамической расширенный текстовый элемент управления, вам действительно не нужно имя. Что-то вроде этого должно работать (не полностью протестировано):

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 
+0

это программа для словарей и несколько богатых текстовых боксов, которые динамически созданы, поэтому я не знаю их имен. И thery встроены в элемент управления tabl, поэтому iam не могут получить их имена. – user934820

+0

@ user934820 Вы имеете в виду все элементы управления RTF в элементе управления TableLayoutPanel? – LarsTech

+0

no in tabcontrol "TabControl1" – user934820

Смежные вопросы