FormFindText.cs

本文介绍了一个简单的写字板应用程序中查找和替换功能的具体实现方式。包括如何在文本中进行精确匹配查找、替换指定文本以及替换全部出现的目标文本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Windows.Forms;

namespace DIYWordpad
{
    public partial class FormFindText : Form
    {
        #region 自定义对象
        private ToolTip toolTip;
        private RichTextBox richText;
        private RichTextBoxFinds rtbFinds;
        private int indexToText = -1;
        #endregion

        public FormFindText(RichTextBox rtb)
        {
            #region
            InitializeComponent();
            richText = rtb;
            #endregion
        }

        #region RichTextBox.Find
        /// <summary>
        /// start = end,搜索当前文档。end = -1,搜索到当前文档的结尾(正常搜索)。
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        private void FindText(int start, int end)
        {
            if (cbWholeWord.Checked && cbMatchCase.Checked)
                rtbFinds = RichTextBoxFinds.WholeWord | RichTextBoxFinds.MatchCase;
            else if (cbWholeWord.Checked)
                rtbFinds = RichTextBoxFinds.WholeWord;
            else if (cbMatchCase.Checked)
                rtbFinds = RichTextBoxFinds.MatchCase;
            else
                rtbFinds = RichTextBoxFinds.None;
            if (rbUp.Checked)
                rtbFinds |= RichTextBoxFinds.Reverse;
            if (indexToText < 0)
                end = start;
            indexToText = richText.Find(txtFind.Text, start, end, rtbFinds);
        }
        #endregion

        #region RichTextBoxFinds
        private void btnFind_Click(object sender, EventArgs e)
        {
            if (rbDown.Checked)
            {
                FindText(richText.SelectionStart + richText.SelectionLength, -1);
                if (richText.SelectionStart + richText.SelectionLength == richText.TextLength)
                    indexToText = -1;
            }
            else
            {
                FindText(0, richText.SelectionStart);
                if (richText.SelectionStart == 0)
                    indexToText = -1;
            }
            if (indexToText < 0)
            {
                MessageBox.Show(this, "“写字板” 已完成搜索文档。", "写字板", MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtFind.Focus();
                txtFind.SelectAll();
            }
        }
        #endregion

        #region RichTextBox.Replace
        private void btnReplace_Click(object sender, EventArgs e)
        {
            if (richText.SelectedText.ToLowerInvariant() == txtFind.Text.ToLowerInvariant())
            {
                richText.SelectedText = txtReplace.Text;
                richText.Select(richText.SelectionStart - txtReplace.TextLength, txtReplace.TextLength);
            }
            btnFind.PerformClick();
        }
        #endregion

        #region RichTextBox.ReplaceAll
        private void btnReplaceAll_Click(object sender, EventArgs e)
        {
            rtbFinds = RichTextBoxFinds.Reverse;
            if (cbWholeWord.Checked && cbMatchCase.Checked)
                rtbFinds |= RichTextBoxFinds.WholeWord | RichTextBoxFinds.MatchCase;
            else if (cbWholeWord.Checked)
                rtbFinds |= RichTextBoxFinds.WholeWord;
            else if (cbMatchCase.Checked)
                rtbFinds |= RichTextBoxFinds.MatchCase;
            int start = richText.SelectionStart;
            indexToText = richText.TextLength;
            while (indexToText > 0)
            {
                if ((indexToText = richText.Find(txtFind.Text, 0, indexToText, rtbFinds)) > -1)
                    richText.SelectedText = txtReplace.Text;
            }
            richText.SelectionStart = start;
            richText.ScrollToCaret(); // 将控件的内容滚动到当前插入符号位置。
        }
        #endregion

        #region Button.Enabled
        private void txtFind_TextChanged(object sender, EventArgs e)
        {
            bool flag = (txtFind.TextLength > 0);
            btnFind.Enabled = flag;
            btnReplace.Enabled = flag;
            btnReplaceAll.Enabled = flag;
        }
        #endregion

        #region FormClose
        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        #endregion

        #region HelpButton
        protected override void OnHelpButtonClicked(System.ComponentModel.CancelEventArgs e)
        {
            base.OnHelpButtonClicked(e);
            e.Cancel = true;
            if (toolTip == null)
            {
                toolTip = new ToolTip();
                toolTip.IsBalloon = true; // 使用气球状窗口。
                toolTip.ToolTipIcon = ToolTipIcon.Info;
                toolTip.ToolTipTitle = "写字板";
            }
            toolTip.Show("定位文本时,您可以手动设置插入点为起始点执行搜索。", gbFind, 3000);
        }
        #endregion
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值