簡體   English   中英

vb.net查找表格

[英]vb.net Find Form

在Windows中,本機記事本程序具有查找表單。 基本上,當用戶鍵入並單擊“查找下一個”時,程序將繼續查找文本,同時將重點放在“查找”表單上。 這樣,用戶可以繼續按“ Enter”鍵或按鈕,並在突出顯示表單時仍然突出顯示文本。

我的問題是,“搜索”功能的格式不同,每當用戶單擊“ Enter”時,都會找到文本並將焦點設置在TextBox上,但是當用戶再次單擊“ Enter”時,文本將被編輯,因為的重點。

當前,我正在使用正則表達式來執行此操作,並且正在使用通過HostElement的WPF TextBox:

Private Function GetRegExpression() As Regex
    Dim result As Regex
    Dim regExString As [String]
    regExString = txtbx_Find.Text

    If matchCaseCheckBox.Checked Then
        result = New Regex(regExString)
    Else
        result = New Regex(regExString, RegexOptions.IgnoreCase)
    End If
    Return result
End Function

Private Sub FindText()
    ''
    Dim WpfTest1 As New SpellPad.Tb
    Dim ElementHost1 As System.Windows.Forms.Integration.ElementHost = frm_Menu.Controls("ElementHost1")
    Dim TheTextBox As System.Windows.Controls.TextBox = CType(ElementHost1.Child, Tb).ctrl_TextBox
    ''
    If isFirstFind Then
        regex = GetRegExpression()
        match = regex.Match(TheTextBox.Text)
        isFirstFind = False
    Else
        match = regex.Match(TheTextBox.Text, match.Index + 1)
    End If
    If match.Success Then
        Dim row As Integer = TheTextBox.GetLineIndexFromCharacterIndex(TheTextBox.CaretIndex)
        MoveCaretToLine(TheTextBox, row + 1)
        TheTextBox.SelectionStart = match.Index
        TheTextBox.SelectionLength = match.Length
        TheTextBox.Focus()
        Me.Focus()
    Else
        MessageBox.Show([String].Format("Cannot find ""{0}""   ", txtbx_Find.Text), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information)
        isFirstFind = True
    End If
End Sub


Private Sub btn_FindNext_Click(sender As Object, e As EventArgs) Handles btn_FindNext.Click
    ''
    Dim WpfTest1 As New SpellPad.Tb
    Dim ElementHost1 As System.Windows.Forms.Integration.ElementHost = frm_Menu.Controls("ElementHost1")
    Dim TheTextBox As System.Windows.Controls.TextBox = CType(ElementHost1.Child, Tb).ctrl_TextBox
    ''
    FindText()
    'theTextBox.Focus()

End Sub

我希望它就像記事本一樣,用戶單擊“ Enter”並在選擇文本時將重點放在“查找表單”上。 如何做到這一點?

我認為您應該像這樣捕獲表單的“ keyup”事件:

Class MainWindow
Private Sub Window_KeyUp(sender As System.Object, e As System.Windows.Input.KeyEventArgs) Handles MyBase.KeyUp
    If e.Key = Key.Enter Then
        FindNext()
    End If
End Sub
Private Sub btn_FindNext_Click(sender As Object, e As EventArgs) Handles btn_FindNext.Click
    FindText()
End Sub
Private Sub FindNext()
    ''
    Dim WpfTest1 As New SpellPad.Tb
    Dim ElementHost1 As System.Windows.Forms.Integration.ElementHost = frm_Menu.Controls("ElementHost1")
    Dim TheTextBox As System.Windows.Controls.TextBox = CType(ElementHost1.Child, Tb).ctrl_TextBox
    ''
    FindText()
    'theTextBox.Focus()

End Sub
End Class

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM