我有我的frmMain
,它有RichTextBox1
,我有一个按钮btnfind&Replace
,它的点击事件从frmFindandReplace
弹出另一分钟,它有两个文本框:TextBoxSearch
和TextBoxReplace
,有两个按钮:replaceButton
和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
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然后