none
RichTextBox的Find方法,在现实中如何使用? RRS feed

  • 问题

  • RichTextBox的Find方法,在SDK文档里说,就是返回第一个实例的位置。这有个屁用?

    我想查找字符串。找到后的字符串,是选定的。而且,继续点击按钮后,就继续往下查找。直到最后。



    private void Button1_Click(object sender,EventArgs e)
    {this.RichTextBox1.Find(this.TextBoxSearch.Text);}



    如何修改上面这代码,实现我想要的查找功能?
    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.1.4, Visual Studio 2005, Eclipse 3.4, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.6.36, SQL Server 2000, MySQL 5.0, FireBird 2.1.1, PHP 5.2.4, Office 2007, OpenOffice 3.0和永中Office2009.
    2009年4月21日 3:37

答案

  • 你好!
         我刚才帮你写了一个:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            private int FindStartPosition = 0;
            private bool stringFound = false;
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                this.richTextBox1.Text = "this is a this book this";
            }

            private void button1_Click(object sender, EventArgs e)
            {
                string input = "fun";
                int foundIndex=this.richTextBox1.Find(input,FindStartPosition,RichTextBoxFinds.None);
                if (foundIndex == -1)
                {
                    if (stringFound)
                    {
                        MessageBox.Show("已达文件尾");
                        FindStartPosition = 0;
                    }
                    else
                    {
                        MessageBox.Show("没有找到输入的字符串");
                    }
                }
                else
                {
                    this.richTextBox1.Select(foundIndex, input.Length);
                    stringFound = true;

                }
                FindStartPosition = foundIndex + 1;
               
            }
        }
    }
    周雪峰
    • 已标记为答案 dvdvip 2009年4月21日 7:43
    2009年4月21日 6:22
    版主

全部回复

  • 你可以看一下MSDN,find函数有几个重载,你可以试一下RichTextBox.Find (String, Int32, RichTextBoxFinds)或者RichTextBox.Find (String, Int32, Int32, RichTextBoxFinds) ,可以满足你的要求。http://msdn.microsoft.com/zh-cn/library/system.windows.forms.richtextbox.find(VS.80).aspx
    2009年4月21日 3:55
  • 是的,我早就看过了。看过了我才问。

    你好像没有看清楚我的问题呀。


    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.1.4, Visual Studio 2005, Eclipse 3.4, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.6.36, SQL Server 2000, MySQL 5.0, FireBird 2.1.1, PHP 5.2.4, Office 2007, OpenOffice 3.0和永中Office2009.
    2009年4月21日 4:33
  • RichTextBox.Find (String, Int32, RichTextBoxFinds)的第二个参数就是控件文本中开始搜索的位置。既然你找到了第一个,那第二个就不难找了啊,搜索第二个时可以利用第一次的返回值,以后第三个、第四个就可以依次类推啊。MSDN中的例子中说的也很明白,具体请再仔细看一下MSDN。
    2009年4月21日 6:11
  • 你好!
         我刚才帮你写了一个:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            private int FindStartPosition = 0;
            private bool stringFound = false;
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                this.richTextBox1.Text = "this is a this book this";
            }

            private void button1_Click(object sender, EventArgs e)
            {
                string input = "fun";
                int foundIndex=this.richTextBox1.Find(input,FindStartPosition,RichTextBoxFinds.None);
                if (foundIndex == -1)
                {
                    if (stringFound)
                    {
                        MessageBox.Show("已达文件尾");
                        FindStartPosition = 0;
                    }
                    else
                    {
                        MessageBox.Show("没有找到输入的字符串");
                    }
                }
                else
                {
                    this.richTextBox1.Select(foundIndex, input.Length);
                    stringFound = true;

                }
                FindStartPosition = foundIndex + 1;
               
            }
        }
    }
    周雪峰
    • 已标记为答案 dvdvip 2009年4月21日 7:43
    2009年4月21日 6:22
    版主
  • MSDN里就是说得不明不白。我才问。

    你的回答太理论化了。理论上,每个人漂一眼MSDN,都会变成编程高手了。


    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.1.4, Visual Studio 2005, Eclipse 3.4, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.6.36, SQL Server 2000, MySQL 5.0, FireBird 2.1.1, PHP 5.2.4, Office 2007, OpenOffice 3.0和永中Office2009.
    2009年4月21日 7:42
  • 非要给你写出来啊!!??我觉得还是自己动手比较好。好在斑竹热心肠!
    2009年4月21日 8:50
  • 这个方法,根本没有用。不能简化代码。比IndexOf方法更难用,更难控制。

    不知道微软在搞什么鬼。

    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 2.1.4, Visual Studio 2005, Eclipse 3.4, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.6.36, SQL Server 2000, MySQL 5.0, FireBird 2.1.1, PHP 5.2.4, Office 2007, OpenOffice 3.0和永中Office2009.
    2009年4月21日 23:16
  • 今天试了很久找到了一个方法可以实现全篇查找,但是我还不知道如何进行定位。方法如下

    首先声明一个函数,是msdn上的

    Public Function FindMyText(ByVal searchText As String, ByVal searchStart As Integer, ByVal searchEnd As Integer) As Integer
            ' Initialize the return value to false by default.
            Dim returnValue As Integer = -1

            ' Ensure that a search string and a valid starting point are specified.
            If searchText.Length > 0 And searchStart >= 0 Then
                ' Ensure that a valid ending value is provided.
                If searchEnd > searchStart Or searchEnd = -1 Then
                    ' Obtain the location of the search string in richTextBox1.
                    Dim indexToText As Integer = richTextBox1.Find(searchText, searchStart, searchEnd, RichTextBoxFinds.MatchCase)
                    ' Determine whether the text was found in richTextBox1.
                    If indexToText >= 0 Then
                        ' Return the index to the specified search text.
                        returnValue = indexToText
                    End If
                End If
            End If

            Return returnValue

        End Function

     

    然后在按钮事件中加入如下代码

      Static num As Integer = 0
            Dim a As Integer
            a = FindMyText(TextBox2.Text, num, -1)
            Label2.Text = a

            If a >= 0 Then

                RichTextBox1.SelectionColor = Color.Red

            End If
         
            num = a + 1

    这样就可以实现逐个查找了测试通过!!!

    2010年4月4日 15:37