使用其他表单查找和替换



我有我的frmMain,它有RichTextBox1,我有一个按钮btnfind&Replace,它的点击事件从frmFindandReplace弹出另一分钟,它有两个文本框:TextBoxSearchTextBoxReplace,有两个按钮:replaceButtonfindButton。我似乎无法获得在文本框中查找单词的实例和替换它的实例的代码。这是我的代码:

Public Class frmFindandReplace
Dim txtClientArea As RichTextBox
Private Sub TextBoxSearch_TextChanged(sender As Object, e As EventArgs) Handles TextBoxSearch.TextChanged
End Sub
Private Sub frmFindandReplace_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Private Sub replaceButton_Click(sender As Object, e As EventArgs) Handles replaceButton.Click
End Sub

Protected Friend Sub findButton_Click(sender As Object, e As EventArgs) Handles findButton.Click
    Dim a As String
    Dim b As String

    a = TextBoxSearch.Text
    b = InStr(StartPosition, a, txtClientArea)
    If b Then txtClientArea.Focus()
    txtClientArea.SelectionStart = b - 1
    txtClientArea.SelectionLength = Len(a)
    txtClientArea.ScrollToCaret()


End Sub 

findButton代码甚至不起作用。抛出错误!

错误3:重载解析失败,因为无法使用以下参数调用可访问的"InStr":"Public Function InStr(Start As Integer,String1 As String,String2 As String,[Compare As Microsoft.VisualBasic.CompareMethod=Microsoft.VisualBasil.CompareMethod.Binary])As Integer":"System.Windows.Forms.TextBox"类型的值无法转换为"String"。"Public Function InStr(String1 As String,String2 As String,[Compare As Microsoft.VisualBasic.CompareMethod=Microsoft.VisualBasic.CompareMethod.Binary])As Integer":"System.Windows.Forms.RichTextBox"类型的值无法转换为"Microsoft.VisualBasil.CompareMethod"。C:\Users\Joseph GodwinKE\Documents\Visual Studio 2013\Projects\simpleapp\frmFindandReplace.VB 25 13 Simple app

我知道我做得不多,但我是新手,我在互联网上搜索解决方案的所有努力都失败了!谢谢你,我希望有人能帮助我。

几个指针:

InStr返回一个整数。查看文档,因为它会显示您的搜索值错误。启用Option Explicit可帮助查找问题。

这应该效果更好。

Private Sub findButton_Click(sender As Object, e As EventArgs) Handles findButton.Click
    Dim searchString As String
    Dim findPos As Integer
    Try
        searchString = TextBoxSearch.Text
        findPos = InStr(txtClientArea.Text, searchString)
        If findPos > 0 Then txtClientArea.Focus()
        txtClientArea.SelectionStart = findPos - 1
        txtClientArea.SelectionLength = searchString.Length
        txtClientArea.ScrollToCaret()
    Catch ex As Exception
        MessageBox.Show(String.Concat("An error occurred: ", ex.Message))
    End Try
End Sub

如果您想要您的代码工作,您需要将对第一个表单中存在的RichTextBox的引用传递到findandReplace表单。
否则,您将无法使用RichTextBox的那个实例。

通常,这意味着,当您创建并打开findandReplace窗体的实例时,您可以将对RichTextBox的引用传递给构造函数的调用。像这样的

Dim fReplace As frmFindandReplace = New frmFindandReplace(Me.txtClientArea)
fReplace.Show()

在这里,New调用到达frmfindandReplace的构造函数。这个调用通常被VB.NET隐藏,但您可以添加它,为它编写显式代码

Public Class frmFindandReplace
   Dim txtClientArea As RichTextBox
   Public Sub New (ByVal txt as RichTextBox)
        txtClientArea = txt
   End Sub

现在,findandReplace类中的全局变量txtClientArea被分配给第一个表单中存在的RichTextBox的现有引用,您可以很高兴地使用它

Protected Friend Sub findButton_Click(sender As Object, e As EventArgs) Handles findButton.Click
    Dim a As String
    a = TextBoxSearch.Text
    Dim position = txtClientArea.Find(a, 0, RichTextBoxFinds.MatchCase)        
    .....
End Sub

请帮自己一个忙,开始使用.NET Framework库中提供的更完整的方法,停止使用老式的VBA方法
例如,RichTextBox有一个方法,它可以完全执行您在代码中尝试执行的操作。Find,搜索文本框的内容,如果找到匹配项,则突出显示文本并返回文本的起始位置
没有replace内置方法,但具有位置和长度对于实现自己的替换代码来说非常简单。

您已将b定义为字符串。将其更改为整数。此外,Instr不允许您设置开始位置,只允许设置一个要搜索的字符串和要搜索的串,以及可选的搜索类型-二进制或文本。

最后,不要键入如果b然后,请使用If b>0然后

最新更新