使用其他表单

时间:2015-12-26 08:26:23

标签: vb.net replace find

我的frmMainRichTextBox1我有一个按钮btnfind&Replace,其点击事件会弹出另一个分钟格式frmFindandReplace,其中有两个文本框:{{1}和} TextBoxSearch有两个按钮:TextBoxReplacereplaceButton。我似乎无法获取我在文本框中找到单词的实例的代码以及替换它的实例。这是我的代码:

findButton

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 代码甚至无效。引发错误!

  

错误3:重载决策失败,因为没有可访问的' InStr'可以使用以下参数调用:       '公共函数InStr(以整数开头,String1为字符串,String2为字符串,[比较为Microsoft.VisualBasic.CompareMethod = Microsoft.VisualBasic.CompareMethod.Binary])作为整数':类型的值#39 ; System.Windows.Forms.TextBox'无法转换为' String'。       '公共函数InStr(String1 As String,String2 As String,[Compare As Microsoft.VisualBasic.CompareMethod = Microsoft.VisualBasic.CompareMethod.Binary])As Integer':Type of System的类型值.Windows .Forms.RichTextBox'无法转换为' Microsoft.VisualBasic.CompareMethod'。 C:\ Users \ Joseph GodwinKE \ Documents \ Visual Studio 2013 \ Projects \ simpleapp \ frmFindandReplace.VB 25 13简单的应用程序

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

3 个答案:

答案 0 :(得分:0)

一些指示:

InStr返回一个整数。 检查文档,因为它会显示您的搜索值错误。 启用“明确选项”以帮助您找到问题。

这应该会更好。

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

答案 1 :(得分:0)

如果您希望代码正常工作,则需要将对第一个表单中的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,搜索文本框的内容,如果找到匹配项,则会突出显示文本并返回文本的起始位置。
没有替换内置方法,但具有位置和长度非常简单,可以实现自己的替换代码。

答案 2 :(得分:0)

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

最后,而不是键入如果b然后,请使用如果b> 0然后,而不是关闭Option Strict。使用Option Strict编写代码总是更好,因为它可以让你编写更好的代码,从长远来看更容易追查错误