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
}
}