------ #### SuperDesign V3.0.2412.2001 - *.[新增]新增程序更新日志设置和自动发布功能。 - *.[修复]修复Post数据格式不正确时双击文本框会导致软件闪退的BUG。
1220 lines
44 KiB
C#
1220 lines
44 KiB
C#
namespace ScintillaNET_FindReplaceDialog
|
||
{
|
||
using ryCommon;
|
||
using ScintillaNET;
|
||
using SuperDesign.Controls.Highlight.FindReplace;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Diagnostics;
|
||
using System.Drawing;
|
||
using System.Text.RegularExpressions;
|
||
using System.Windows.Forms;
|
||
using static ScintillaNET.Style;
|
||
|
||
public partial class FindReplaceDialog : Form
|
||
{
|
||
#region Fields
|
||
|
||
private bool _autoPosition;
|
||
private readonly BindingSource _bindingSourceFind = new BindingSource();
|
||
private readonly BindingSource _bindingSourceReplace = new BindingSource();
|
||
private List<string> _mruFind;
|
||
private int _mruMaxCount = 10;
|
||
private List<string> _mruReplace;
|
||
private Scintilla _scintilla;
|
||
private CharacterRange _searchRange;
|
||
|
||
#endregion Fields
|
||
|
||
public event KeyPressedHandler KeyPressed;
|
||
|
||
public delegate void KeyPressedHandler(object sender, KeyEventArgs e);
|
||
|
||
#region Constructors
|
||
|
||
public FindReplaceDialog()
|
||
{
|
||
InitializeComponent();
|
||
|
||
_autoPosition = true;
|
||
_mruFind = new List<string>();
|
||
_mruReplace = new List<string>();
|
||
var lst1 = RyFiles.ReadAllLines(Application.StartupPath + "\\UserDb\\mruFind.lst");
|
||
if (lst1 != null)
|
||
{
|
||
_mruFind.AddRange(lst1);
|
||
}
|
||
var lst2 = RyFiles.ReadAllLines(Application.StartupPath + "\\UserDb\\mruReplace.lst");
|
||
if (lst2 != null)
|
||
{
|
||
_mruReplace.AddRange(lst2);
|
||
}
|
||
_bindingSourceFind.DataSource = _mruFind;
|
||
_bindingSourceReplace.DataSource = _mruReplace;
|
||
txtFindF.DataSource = _bindingSourceFind;
|
||
txtFindR.DataSource = _bindingSourceFind;
|
||
TxtFileSearchText.DataSource = _bindingSourceFind;
|
||
txtReplace.DataSource = _bindingSourceReplace;
|
||
TxtFileReplaceText.DataSource = _bindingSourceReplace;
|
||
if (!DesignMode)
|
||
{
|
||
try
|
||
{
|
||
ryCommon.Ini ini = new ryCommon.Ini(Application.StartupPath + "\\UserDb\\FindReplace.ini");
|
||
TxtFileType.Text = ini.ReadIni("FileFind", "Exts", "*.*");
|
||
ChkSkipDirName.Checked = ini.ReadIni("FileFind", "SkipDirName_On", true);
|
||
CbbSkipDirName.Text = ini.ReadIni("FileFind", "SkipDirName_Text", CbbSkipDirName.Text);
|
||
ChkSubDir.Checked = ini.ReadIni("FileFind", "SearchSubDir", false);
|
||
ChkIgnoreBinExt.Checked = ini.ReadIni("FileFind", "IgnoreBinExt", true);
|
||
ChkHiddenDir.Checked = ini.ReadIni("FileFind", "SearchHiddenDir", false);
|
||
ChkLimitFileSize.Checked = ini.ReadIni("FileFind", "LimitFileSize_On", true);
|
||
NumLimitFileSize.Value = ini.ReadIni("FileFind", "LimitFileSize_Value", 1, 1000, 20); }
|
||
catch { }
|
||
}
|
||
LastTab = tpgFind;
|
||
LastFingConfig = fcFind;
|
||
}
|
||
|
||
#endregion Constructors
|
||
|
||
#region Properties
|
||
|
||
/// <summary>
|
||
/// Gets or sets whether the dialog should automatically move away from the current
|
||
/// selection to prevent obscuring it.
|
||
/// </summary>
|
||
/// <returns>true to automatically move away from the current selection; otherwise, false.</returns>
|
||
public bool AutoPosition
|
||
{
|
||
get
|
||
{
|
||
return _autoPosition;
|
||
}
|
||
set
|
||
{
|
||
_autoPosition = value;
|
||
}
|
||
}
|
||
|
||
public List<string> MruFind
|
||
{
|
||
get
|
||
{
|
||
return _mruFind;
|
||
}
|
||
set
|
||
{
|
||
_mruFind = value;
|
||
_bindingSourceFind.DataSource = _mruFind;
|
||
}
|
||
}
|
||
|
||
public int MruMaxCount
|
||
{
|
||
get { return _mruMaxCount; }
|
||
set { _mruMaxCount = value; }
|
||
}
|
||
|
||
public List<string> MruReplace
|
||
{
|
||
get
|
||
{
|
||
return _mruReplace;
|
||
}
|
||
set
|
||
{
|
||
_mruReplace = value;
|
||
_bindingSourceReplace.DataSource = _mruReplace;
|
||
}
|
||
}
|
||
|
||
public Scintilla Scintilla
|
||
{
|
||
get
|
||
{
|
||
return _scintilla;
|
||
}
|
||
set
|
||
{
|
||
_scintilla = value;
|
||
}
|
||
}
|
||
|
||
public FindReplace FindReplace { get; set; }
|
||
|
||
#endregion Properties
|
||
|
||
#region Form Event Handlers
|
||
|
||
private void FindReplaceDialog_FormClosing(object sender, FormClosingEventArgs e)
|
||
{
|
||
if (e.CloseReason == CloseReason.UserClosing)
|
||
{
|
||
e.Cancel = true;
|
||
Hide();
|
||
}
|
||
RyFiles.WriteAllLines(Application.StartupPath + "\\UserDb\\mruFind.lst",_mruFind.ToArray(), System.Text.Encoding.UTF8);
|
||
RyFiles.WriteAllLines(Application.StartupPath + "\\UserDb\\mruReplace.lst", _mruReplace.ToArray(), System.Text.Encoding.UTF8);
|
||
}
|
||
|
||
#endregion Form Event Handlers
|
||
|
||
#region Event Handlers
|
||
|
||
private void BtnClear_Click(object sender, EventArgs e)
|
||
{
|
||
_scintilla.MarkerDeleteAll(FindReplace.Marker.Index);
|
||
FindReplace.ClearAllHighlights();
|
||
}
|
||
|
||
private void BtnFindAll_Click(object sender, EventArgs e)
|
||
{
|
||
if (txtFindF.Text == string.Empty)
|
||
return;
|
||
|
||
AddFindMru();
|
||
|
||
lblStatus.Text = string.Empty;
|
||
|
||
BtnClear_Click(null, null);
|
||
int foundCount = 0;
|
||
|
||
#region RegEx
|
||
|
||
if (fcFind.SearchMode==2)
|
||
{
|
||
Regex rr;
|
||
try
|
||
{
|
||
rr = new Regex(txtFindF.Text, GetRegexOptions());
|
||
}
|
||
catch (ArgumentException ex)
|
||
{
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>: " + ex.Message;
|
||
return;
|
||
}
|
||
|
||
if (chkSearchSelectionF.Checked)
|
||
{
|
||
if (_searchRange.CpMin == _searchRange.CpMax)
|
||
{
|
||
_searchRange = new CharacterRange(_scintilla.Selections[0].Start, _scintilla.Selections[0].End);
|
||
}
|
||
|
||
foundCount = FindReplace.FindAll(_searchRange, rr, chkMarkLine.Checked, chkHighlightMatches.Checked).Count;
|
||
}
|
||
else
|
||
{
|
||
_searchRange = new CharacterRange();
|
||
foundCount = FindReplace.FindAll(rr, chkMarkLine.Checked, chkHighlightMatches.Checked).Count;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region Non-RegEx
|
||
|
||
if (fcFind.SearchMode!=2)
|
||
{
|
||
if (chkSearchSelectionF.Checked)
|
||
{
|
||
if (_searchRange.CpMin == _searchRange.CpMax)
|
||
_searchRange = new CharacterRange(_scintilla.Selections[0].Start, _scintilla.Selections[0].End);
|
||
|
||
string textToFind = fcFind.SearchMode==1 ? FindReplace.Transform(txtFindF.Text) : txtFindF.Text;
|
||
foundCount = FindReplace.FindAll(_searchRange, textToFind, GetSearchFlags(), chkMarkLine.Checked, chkHighlightMatches.Checked).Count;
|
||
}
|
||
else
|
||
{
|
||
_searchRange = new CharacterRange();
|
||
string textToFind = fcFind.SearchMode==1 ? FindReplace.Transform(txtFindF.Text) : txtFindF.Text;
|
||
foundCount = FindReplace.FindAll(textToFind, GetSearchFlags(), chkMarkLine.Checked, chkHighlightMatches.Checked).Count;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
lblStatus.Text = "<22>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>: " + foundCount.ToString();
|
||
}
|
||
|
||
private void BtnFindNext_Click(object sender, EventArgs e)
|
||
{
|
||
FindNext();
|
||
}
|
||
|
||
private void BtnFindPrevious_Click(object sender, EventArgs e)
|
||
{
|
||
FindPrevious();
|
||
}
|
||
|
||
private void BtnReplaceAll_Click(object sender, EventArgs e)
|
||
{
|
||
if (txtFindR.Text == string.Empty)
|
||
return;
|
||
|
||
AddReplaceMru();
|
||
lblStatus.Text = string.Empty;
|
||
int foundCount = 0;
|
||
|
||
#region RegEx
|
||
|
||
if (fcReplace.SearchMode==2)
|
||
{
|
||
Regex rr;
|
||
try
|
||
{
|
||
rr = new Regex(txtFindR.Text, GetRegexOptions());
|
||
}
|
||
catch (ArgumentException ex)
|
||
{
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>: " + ex.Message;
|
||
return;
|
||
}
|
||
|
||
if (chkSearchSelectionR.Checked)
|
||
{
|
||
if (_searchRange.CpMin == _searchRange.CpMax)
|
||
{
|
||
_searchRange = new CharacterRange(_scintilla.Selections[0].Start, _scintilla.Selections[0].End);
|
||
}
|
||
|
||
foundCount = FindReplace.ReplaceAll(_searchRange, rr, txtReplace.Text, false, false);
|
||
}
|
||
else
|
||
{
|
||
_searchRange = new CharacterRange();
|
||
foundCount = FindReplace.ReplaceAll(rr, txtReplace.Text, false, false);
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region Non-RegEx
|
||
|
||
if (fcReplace.SearchMode!=2)
|
||
{
|
||
if (chkSearchSelectionR.Checked)
|
||
{
|
||
if (_searchRange.CpMin == _searchRange.CpMax)
|
||
_searchRange = new CharacterRange(_scintilla.Selections[0].Start, _scintilla.Selections[0].End);
|
||
|
||
string textToFind = fcReplace.SearchMode==1? FindReplace.Transform(txtFindR.Text) : txtFindR.Text;
|
||
string textToReplace = fcReplace.SearchMode==1 ? FindReplace.Transform(txtReplace.Text) : txtReplace.Text;
|
||
foundCount = FindReplace.ReplaceAll(_searchRange, textToFind, textToReplace, GetSearchFlags(), false, false);
|
||
}
|
||
else
|
||
{
|
||
_searchRange = new CharacterRange();
|
||
string textToFind = fcReplace.SearchMode==1 ? FindReplace.Transform(txtFindR.Text) : txtFindR.Text;
|
||
string textToReplace = fcReplace.SearchMode==1 ? FindReplace.Transform(txtReplace.Text) : txtReplace.Text;
|
||
//FindReplace.Scintilla.Text = FindReplace.Scintilla.Text.Replace(textToFind, textToReplace);
|
||
foundCount = FindReplace.ReplaceAll(textToFind, textToReplace, GetSearchFlags(), false, false);
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
lblStatus.Text = "<22>ܹ<EFBFBD><DCB9>滻: " + foundCount.ToString();
|
||
}
|
||
|
||
private void BtnReplaceNext_Click(object sender, EventArgs e)
|
||
{
|
||
ReplaceNext();
|
||
}
|
||
|
||
private void BtnReplacePrevious_Click(object sender, EventArgs e)
|
||
{
|
||
if (txtFindR.Text == string.Empty)
|
||
return;
|
||
|
||
AddReplaceMru();
|
||
lblStatus.Text = string.Empty;
|
||
|
||
CharacterRange nextRange;
|
||
try
|
||
{
|
||
nextRange = ReplaceNext(true);
|
||
}
|
||
catch (ArgumentException ex)
|
||
{
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>: " + ex.Message;
|
||
return;
|
||
}
|
||
|
||
if (nextRange.CpMin == nextRange.CpMax)
|
||
{
|
||
lblStatus.Text = "<22>Ҳ<EFBFBD><D2B2><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>";
|
||
}
|
||
else
|
||
{
|
||
if (nextRange.CpMin > _scintilla.AnchorPosition)
|
||
{
|
||
if (chkSearchSelectionR.Checked)
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD>ƥ<EFBFBD>任<EFBFBD>е<EFBFBD><D0B5><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>ݵĿ<DDB5>ͷ";
|
||
else
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD>ƥ<EFBFBD>任<EFBFBD>е<EFBFBD><D0B5>ĵ<EFBFBD><C4B5><EFBFBD>ͷ";
|
||
}
|
||
SetSel(nextRange.CpMin, nextRange.CpMax);
|
||
MoveFormAwayFromSelection();
|
||
}
|
||
}
|
||
|
||
private void CmdRecentFindF_Click(object sender, EventArgs e)
|
||
{
|
||
mnuRecentFindF.Items.Clear();
|
||
foreach (var item in MruFind)
|
||
{
|
||
ToolStripItem newItem = mnuRecentFindF.Items.Add(item);
|
||
newItem.Tag = item;
|
||
}
|
||
mnuRecentFindF.Items.Add("-");
|
||
mnuRecentFindF.Items.Add("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ");
|
||
mnuRecentFindF.Show(cmdRecentFindF.PointToScreen(cmdRecentFindF.ClientRectangle.Location));
|
||
}
|
||
|
||
private void CmdRecentFindR_Click(object sender, EventArgs e)
|
||
{
|
||
mnuRecentFindR.Items.Clear();
|
||
foreach (var item in MruFind)
|
||
{
|
||
ToolStripItem newItem = mnuRecentFindR.Items.Add(item);
|
||
newItem.Tag = item;
|
||
}
|
||
mnuRecentFindR.Items.Add("-");
|
||
mnuRecentFindR.Items.Add("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ");
|
||
mnuRecentFindR.Show(cmdRecentFindR.PointToScreen(cmdRecentFindR.ClientRectangle.Location));
|
||
}
|
||
|
||
private void CmdRecentReplace_Click(object sender, EventArgs e)
|
||
{
|
||
mnuRecentReplace.Items.Clear();
|
||
foreach (var item in MruReplace)
|
||
{
|
||
ToolStripItem newItem = mnuRecentReplace.Items.Add(item);
|
||
newItem.Tag = item;
|
||
}
|
||
mnuRecentReplace.Items.Add("-");
|
||
mnuRecentReplace.Items.Add("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ");
|
||
mnuRecentReplace.Show(cmdRecentReplace.PointToScreen(cmdRecentReplace.ClientRectangle.Location));
|
||
}
|
||
|
||
private void CmdExtendedCharFindF_Click(object sender, EventArgs e)
|
||
{
|
||
if (fcFind.SearchMode == 1)
|
||
{
|
||
mnuExtendedCharFindF.Show(cmdExtCharAndRegExFindF.PointToScreen(cmdExtCharAndRegExFindF.ClientRectangle.Location));
|
||
}
|
||
else if (fcFind.SearchMode==2)
|
||
{
|
||
mnuRegExCharFindF.Show(cmdExtCharAndRegExFindF.PointToScreen(cmdExtCharAndRegExFindF.ClientRectangle.Location));
|
||
}
|
||
}
|
||
|
||
private void CmdExtendedCharFindR_Click(object sender, EventArgs e)
|
||
{
|
||
if (fcReplace.SearchMode==1)
|
||
{
|
||
mnuExtendedCharFindR.Show(cmdExtCharAndRegExFindR.PointToScreen(cmdExtCharAndRegExFindR.ClientRectangle.Location));
|
||
}
|
||
else if (fcReplace.SearchMode==2)
|
||
{
|
||
mnuRegExCharFindR.Show(cmdExtCharAndRegExFindR.PointToScreen(cmdExtCharAndRegExFindR.ClientRectangle.Location));
|
||
}
|
||
}
|
||
|
||
private void CmdExtendedCharReplace_Click(object sender, EventArgs e)
|
||
{
|
||
if (fcReplace.SearchMode==1)
|
||
{
|
||
mnuExtendedCharReplace.Show(cmdExtCharAndRegExReplace.PointToScreen(cmdExtCharAndRegExReplace.ClientRectangle.Location));
|
||
}
|
||
else if (fcReplace.SearchMode==2)
|
||
{
|
||
mnuRegExCharReplace.Show(cmdExtCharAndRegExReplace.PointToScreen(cmdExtCharAndRegExReplace.ClientRectangle.Location));
|
||
}
|
||
}
|
||
private TabPage LastTab = null;
|
||
private FindConfig LastFingConfig = null;
|
||
private void TabAll_SelectedIndexChanged(object sender, EventArgs e)
|
||
{
|
||
if (tabAll.SelectedTab == tpgFind)
|
||
{
|
||
fcFind.LoadConfig(LastFingConfig);
|
||
chkWrapF.Checked = chkWrapR.Checked;
|
||
chkSearchSelectionF.Checked = chkSearchSelectionR.Checked;
|
||
AcceptButton = btnFindNextF;
|
||
}
|
||
else if (tabAll.SelectedTab == tpgReplace)
|
||
{
|
||
fcReplace.LoadConfig(LastFingConfig);
|
||
chkWrapR.Checked = chkWrapF.Checked;
|
||
chkSearchSelectionR.Checked = chkSearchSelectionF.Checked;
|
||
AcceptButton = btnReplaceNext;
|
||
}
|
||
else if (tabAll.SelectedTab == tpgFileFind)
|
||
{
|
||
fcFile.LoadConfig(LastFingConfig);
|
||
chkWrapR.Checked = chkWrapF.Checked;
|
||
chkSearchSelectionR.Checked = chkSearchSelectionF.Checked;
|
||
AcceptButton = btnReplaceNext;
|
||
}
|
||
SyncTextUI();
|
||
LastTab = tabAll.SelectedTab;
|
||
if(tabAll.SelectedTab== tpgFind)
|
||
{
|
||
LastFingConfig = fcFind;
|
||
}
|
||
else if (tabAll.SelectedTab == tpgReplace)
|
||
{
|
||
LastFingConfig = fcReplace;
|
||
}
|
||
else if (tabAll.SelectedTab == tpgFileFind)
|
||
{
|
||
LastFingConfig = fcFile;
|
||
}
|
||
}
|
||
private void SyncTextUI()
|
||
{
|
||
if(tabAll.SelectedTab==tpgFind)
|
||
{
|
||
if (LastTab == tpgReplace)
|
||
{
|
||
txtFindF.Text=txtFindR.Text;
|
||
}
|
||
else if (LastTab == tpgFileFind)
|
||
{
|
||
txtFindF.Text = TxtFileSearchText.Text;
|
||
}
|
||
}
|
||
else if (tabAll.SelectedTab == tpgReplace)
|
||
{
|
||
if (LastTab == tpgFind)
|
||
{
|
||
txtFindR.Text = txtFindF.Text;
|
||
}
|
||
else if (LastTab == tpgFileFind)
|
||
{
|
||
txtFindR.Text = TxtFileSearchText.Text;
|
||
txtReplace.Text = TxtFileReplaceText.Text;
|
||
}
|
||
}
|
||
else if (tabAll.SelectedTab == tpgFileFind)
|
||
{
|
||
if (LastTab == tpgFind)
|
||
{
|
||
TxtFileSearchText.Text = txtFindF.Text;
|
||
}
|
||
else if (LastTab == tpgReplace)
|
||
{
|
||
TxtFileSearchText.Text = txtFindR.Text;
|
||
TxtFileReplaceText.Text = txtReplace.Text;
|
||
}
|
||
}
|
||
}
|
||
#endregion Event Handlers
|
||
|
||
#region Methods
|
||
|
||
public void FindNext()
|
||
{
|
||
if (Scintilla == null) { return; }
|
||
|
||
if (txtFindF.Text == string.Empty)
|
||
return;
|
||
|
||
AddFindMru();
|
||
lblStatus.Text = string.Empty;
|
||
|
||
CharacterRange foundRange;
|
||
|
||
try
|
||
{
|
||
foundRange = FindNextF(false);
|
||
}
|
||
catch (ArgumentException ex)
|
||
{
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>: " + ex.Message;
|
||
return;
|
||
}
|
||
|
||
if (foundRange.CpMin == foundRange.CpMax)
|
||
{
|
||
lblStatus.Text = "<22>Ҳ<EFBFBD><D2B2><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>";
|
||
}
|
||
else
|
||
{
|
||
if (foundRange.CpMin < Scintilla.AnchorPosition)
|
||
{
|
||
if (chkSearchSelectionF.Checked)
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD>ƥ<EFBFBD>任<EFBFBD>е<EFBFBD><D0B5><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>ݵĿ<DDB5>ͷ";
|
||
else
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD>ƥ<EFBFBD>任<EFBFBD>е<EFBFBD><D0B5>ĵ<EFBFBD><C4B5><EFBFBD>ͷ";
|
||
}
|
||
SetSel(foundRange.CpMin, foundRange.CpMax);
|
||
MoveFormAwayFromSelection();
|
||
}
|
||
}
|
||
|
||
public void FindPrevious()
|
||
{
|
||
if (Scintilla == null) { return; }
|
||
|
||
if (txtFindF.Text == string.Empty)
|
||
return;
|
||
|
||
AddFindMru();
|
||
lblStatus.Text = string.Empty;
|
||
CharacterRange foundRange;
|
||
try
|
||
{
|
||
foundRange = FindNextF(true);
|
||
}
|
||
catch (ArgumentException ex)
|
||
{
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>: " + ex.Message;
|
||
return;
|
||
}
|
||
|
||
if (foundRange.CpMin == foundRange.CpMax)
|
||
{
|
||
lblStatus.Text = "<22>Ҳ<EFBFBD><D2B2><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>";
|
||
}
|
||
else
|
||
{
|
||
if (foundRange.CpMin > Scintilla.CurrentPosition)
|
||
{
|
||
if (chkSearchSelectionF.Checked)
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD>ƥ<EFBFBD>任<EFBFBD>е<EFBFBD><D0B5><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>ݵĽ<DDB5>β";
|
||
else
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD>ƥ<EFBFBD>任<EFBFBD>е<EFBFBD><D0B5>ĵ<EFBFBD><C4B5>Ľ<EFBFBD>β";
|
||
}
|
||
SetSel(foundRange.CpMin, foundRange.CpMax);
|
||
MoveFormAwayFromSelection();
|
||
}
|
||
}
|
||
|
||
public RegexOptions GetRegexOptions()
|
||
{
|
||
return LastFingConfig.GetRegexOptions();
|
||
}
|
||
|
||
public SearchFlags GetSearchFlags()
|
||
{
|
||
return LastFingConfig.GetSearchFlags();
|
||
}
|
||
|
||
public virtual void MoveFormAwayFromSelection()
|
||
{
|
||
if (!Visible)
|
||
return;
|
||
|
||
if (!AutoPosition)
|
||
return;
|
||
|
||
int pos = Scintilla.CurrentPosition;
|
||
int x = Scintilla.PointXFromPosition(pos);
|
||
int y = Scintilla.PointYFromPosition(pos);
|
||
|
||
Point cursorPoint = Scintilla.PointToScreen(new Point(x, y));
|
||
|
||
Rectangle r = new Rectangle(Location, Size);
|
||
if (r.Contains(cursorPoint))
|
||
{
|
||
Point newLocation;
|
||
if (cursorPoint.Y < (Screen.PrimaryScreen.Bounds.Height / 2))
|
||
{
|
||
//TODO - replace lineheight with ScintillaNET command, when added
|
||
int SCI_TEXTHEIGHT = 2279;
|
||
int lineHeight = Scintilla.DirectMessage(SCI_TEXTHEIGHT, IntPtr.Zero, IntPtr.Zero).ToInt32();
|
||
// int lineHeight = Scintilla.Lines[Scintilla.LineFromPosition(pos)].Height;
|
||
|
||
// Top half of the screen
|
||
newLocation = Scintilla.PointToClient(
|
||
new Point(Location.X, cursorPoint.Y + lineHeight * 2));
|
||
}
|
||
else
|
||
{
|
||
//TODO - replace lineheight with ScintillaNET command, when added
|
||
int SCI_TEXTHEIGHT = 2279;
|
||
int lineHeight = Scintilla.DirectMessage(SCI_TEXTHEIGHT, IntPtr.Zero, IntPtr.Zero).ToInt32();
|
||
// int lineHeight = Scintilla.Lines[Scintilla.LineFromPosition(pos)].Height;
|
||
|
||
// Bottom half of the screen
|
||
newLocation = Scintilla.PointToClient(
|
||
new Point(Location.X, cursorPoint.Y - Height - (lineHeight * 2)));
|
||
}
|
||
newLocation = Scintilla.PointToScreen(newLocation);
|
||
//Location = newLocation;
|
||
}
|
||
}
|
||
|
||
public void ReplaceNext()
|
||
{
|
||
if (txtFindR.Text == string.Empty)
|
||
return;
|
||
|
||
AddReplaceMru();
|
||
lblStatus.Text = string.Empty;
|
||
|
||
CharacterRange nextRange;
|
||
try
|
||
{
|
||
nextRange = ReplaceNext(false);
|
||
}
|
||
catch (ArgumentException ex)
|
||
{
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>: " + ex.Message;
|
||
return;
|
||
}
|
||
|
||
if (nextRange.CpMin == nextRange.CpMax)
|
||
{
|
||
lblStatus.Text = "<22>Ҳ<EFBFBD><D2B2><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>";
|
||
}
|
||
else
|
||
{
|
||
if (nextRange.CpMin < Scintilla.AnchorPosition)
|
||
{
|
||
if (chkSearchSelectionR.Checked)
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD>ƥ<EFBFBD>任<EFBFBD>е<EFBFBD><D0B5><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>ݵĿ<DDB5>ͷ";
|
||
else
|
||
lblStatus.Text = "<22><><EFBFBD><EFBFBD>ƥ<EFBFBD>任<EFBFBD>е<EFBFBD><D0B5>ĵ<EFBFBD><C4B5><EFBFBD>ͷ";
|
||
}
|
||
SetSel(nextRange.CpMin, nextRange.CpMax);
|
||
MoveFormAwayFromSelection();
|
||
}
|
||
}
|
||
private void SetSel(int CpMin, int CpMax)
|
||
{
|
||
if (_scintilla.GetColumn(CpMin) < _scintilla.GetColumn(CpMax))
|
||
{
|
||
_scintilla.GotoPosition(CpMax);
|
||
}
|
||
else
|
||
{
|
||
_scintilla.GotoPosition(CpMin);
|
||
}
|
||
var line=_scintilla.LineFromPosition(CpMax);
|
||
|
||
//var first_line = _scintilla.FirstVisibleLine;
|
||
_scintilla.FirstVisibleLine = line - 2;
|
||
_scintilla.SetSel(CpMin, CpMax);
|
||
}
|
||
protected override void OnActivated(EventArgs e)
|
||
{
|
||
if(Scintilla==null)
|
||
{
|
||
base.OnActivated(e);
|
||
return;
|
||
}
|
||
//if (Scintilla.Selections.Count > 0)
|
||
//{
|
||
// chkSearchSelectionF.Enabled = true;
|
||
// chkSearchSelectionR.Enabled = true;
|
||
//}
|
||
//else
|
||
//{
|
||
// chkSearchSelectionF.Enabled = false;
|
||
// chkSearchSelectionR.Enabled = false;
|
||
// chkSearchSelectionF.Checked = false;
|
||
// chkSearchSelectionR.Checked = false;
|
||
//}
|
||
|
||
// if they leave the dialog and come back any "Search Selection"
|
||
// range they might have had is invalidated
|
||
_searchRange = new CharacterRange();
|
||
|
||
lblStatus.Text = string.Empty;
|
||
|
||
MoveFormAwayFromSelection();
|
||
|
||
base.OnActivated(e);
|
||
}
|
||
|
||
protected override void OnKeyDown(KeyEventArgs e)
|
||
{
|
||
// So what we're doing here is testing for any of the find/replace
|
||
// command shortcut bindings. If the key combination matches we send
|
||
// the KeyEventArgs back to Scintilla so it can be processed. That
|
||
// way things like Find Next, Show Replace are all available from
|
||
// the dialog using Scintilla's configured Shortcuts
|
||
|
||
//List<KeyBinding> findNextBinding = Scintilla.Commands.GetKeyBindings(BindableCommand.FindNext);
|
||
//List<KeyBinding> findPrevBinding = Scintilla.Commands.GetKeyBindings(BindableCommand.FindPrevious);
|
||
//List<KeyBinding> showFindBinding = Scintilla.Commands.GetKeyBindings(BindableCommand.ShowFind);
|
||
//List<KeyBinding> showReplaceBinding = Scintilla.Commands.GetKeyBindings(BindableCommand.ShowReplace);
|
||
|
||
//KeyBinding kb = new KeyBinding(e.KeyCode, e.Modifiers);
|
||
|
||
//if (findNextBinding.Contains(kb) || findPrevBinding.Contains(kb) || showFindBinding.Contains(kb) || showReplaceBinding.Contains(kb))
|
||
//{
|
||
//Scintilla. FireKeyDown(e);
|
||
//}
|
||
|
||
KeyPressed?.Invoke(this, e);
|
||
|
||
if (e.KeyCode == Keys.Escape)
|
||
Hide();
|
||
|
||
base.OnKeyDown(e);
|
||
}
|
||
private ComboBox GetFindTextBox()
|
||
{
|
||
if (tabAll.SelectedTab == tpgFind)
|
||
{
|
||
return txtFindF;
|
||
}
|
||
else if (tabAll.SelectedTab == tpgReplace)
|
||
{
|
||
return txtFindR;
|
||
}
|
||
else if (tabAll.SelectedTab == tpgFileFind)
|
||
{
|
||
return TxtFileSearchText;
|
||
}
|
||
return null;
|
||
}
|
||
private ComboBox GetReplaceTextBox()
|
||
{
|
||
if (tabAll.SelectedTab == tpgFind)
|
||
{
|
||
return null;
|
||
}
|
||
else if (tabAll.SelectedTab == tpgReplace)
|
||
{
|
||
return txtReplace;
|
||
}
|
||
else if (tabAll.SelectedTab == tpgFileFind)
|
||
{
|
||
return TxtFileReplaceText;
|
||
}
|
||
return null;
|
||
}
|
||
private void AddFindMru()
|
||
{
|
||
string find = GetFindTextBox().Text;
|
||
_mruFind.Remove(find);
|
||
_mruFind.Insert(0, find);
|
||
if(_mruFind.Count> _mruMaxCount)
|
||
{
|
||
_mruFind.RemoveAt(_mruFind.Count - 1);
|
||
}
|
||
_bindingSourceFind.ResetBindings(false);
|
||
txtFindF.Text = find;
|
||
txtFindR.Text = find;
|
||
TxtFileSearchText.Text = find;
|
||
}
|
||
|
||
private void AddReplaceMru()
|
||
{
|
||
string find =GetFindTextBox().Text;
|
||
_mruFind.Remove(find);
|
||
|
||
_mruFind.Insert(0, find);
|
||
|
||
if (_mruFind.Count > _mruMaxCount)
|
||
_mruFind.RemoveAt(_mruFind.Count - 1);
|
||
string replace = GetReplaceTextBox().Text;
|
||
if (replace != string.Empty)
|
||
{
|
||
_mruReplace.Remove(replace);
|
||
|
||
_mruReplace.Insert(0, replace);
|
||
|
||
if (_mruReplace.Count > _mruMaxCount)
|
||
_mruReplace.RemoveAt(_mruReplace.Count - 1);
|
||
}
|
||
_bindingSourceFind.ResetBindings(false);
|
||
_bindingSourceReplace.ResetBindings(false);
|
||
TxtFileReplaceText.Text = replace;
|
||
txtReplace.Text = replace;
|
||
txtFindF.Text = find;
|
||
txtFindR.Text = find;
|
||
TxtFileSearchText.Text = find;
|
||
}
|
||
|
||
private void ContextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||
{
|
||
//Insert the string value held in the menu items Tag field (\t, \n, etc.)
|
||
txtFindF.SelectedText = e.ClickedItem.Tag.ToString();
|
||
}
|
||
|
||
private CharacterRange FindNextF(bool searchUp)
|
||
{
|
||
CharacterRange foundRange;
|
||
|
||
if (fcFind.SearchMode==2)
|
||
{
|
||
Regex rr = new Regex(txtFindF.Text, GetRegexOptions());
|
||
|
||
if (chkSearchSelectionF.Checked)
|
||
{
|
||
if (_searchRange.CpMin == _searchRange.CpMax)
|
||
_searchRange = new CharacterRange(_scintilla.Selections[0].Start, _scintilla.Selections[0].End);
|
||
|
||
if (searchUp)
|
||
foundRange = FindReplace.FindPrevious(rr, chkWrapF.Checked, _searchRange);
|
||
else
|
||
foundRange = FindReplace.FindNext(rr, chkWrapF.Checked, _searchRange);
|
||
}
|
||
else
|
||
{
|
||
_searchRange = new CharacterRange();
|
||
if (searchUp)
|
||
foundRange = FindReplace.FindPrevious(rr, chkWrapF.Checked);
|
||
else
|
||
foundRange = FindReplace.FindNext(rr, chkWrapF.Checked);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (chkSearchSelectionF.Checked)
|
||
{
|
||
if (_searchRange.CpMin == _searchRange.CpMax)
|
||
_searchRange = new CharacterRange(_scintilla.Selections[0].Start, _scintilla.Selections[0].End);
|
||
|
||
if (searchUp)
|
||
{
|
||
string textToFind = fcFind.SearchMode == 1 ? FindReplace.Transform(txtFindF.Text) : txtFindF.Text;
|
||
foundRange = FindReplace.FindPrevious(textToFind, chkWrapF.Checked, GetSearchFlags(), _searchRange);
|
||
}
|
||
else
|
||
{
|
||
string textToFind = fcFind.SearchMode == 1 ? FindReplace.Transform(txtFindF.Text) : txtFindF.Text;
|
||
foundRange = FindReplace.FindNext(textToFind, chkWrapF.Checked, GetSearchFlags(), _searchRange);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_searchRange = new CharacterRange();
|
||
if (searchUp)
|
||
{
|
||
string textToFind = fcFind.SearchMode == 1 ? FindReplace.Transform(txtFindF.Text) : txtFindF.Text;
|
||
foundRange = FindReplace.FindPrevious(textToFind, chkWrapF.Checked, GetSearchFlags());
|
||
}
|
||
else
|
||
{
|
||
string textToFind = fcFind.SearchMode == 1 ? FindReplace.Transform(txtFindF.Text) : txtFindF.Text;
|
||
foundRange = FindReplace.FindNext(textToFind, chkWrapF.Checked, GetSearchFlags());
|
||
}
|
||
}
|
||
}
|
||
return foundRange;
|
||
}
|
||
|
||
private CharacterRange FindNextR(bool searchUp, ref Regex rr)
|
||
{
|
||
CharacterRange foundRange;
|
||
|
||
if (fcReplace.SearchMode==2)
|
||
{
|
||
if (rr == null)
|
||
rr = new Regex(txtFindR.Text, GetRegexOptions());
|
||
|
||
if (chkSearchSelectionR.Checked)
|
||
{
|
||
if (_searchRange.CpMin == _searchRange.CpMax)
|
||
_searchRange = new CharacterRange(_scintilla.Selections[0].Start, _scintilla.Selections[0].End);
|
||
|
||
if (searchUp)
|
||
foundRange = FindReplace.FindPrevious(rr, chkWrapR.Checked, _searchRange);
|
||
else
|
||
foundRange = FindReplace.FindNext(rr, chkWrapR.Checked, _searchRange);
|
||
}
|
||
else
|
||
{
|
||
_searchRange = new CharacterRange();
|
||
if (searchUp)
|
||
foundRange = FindReplace.FindPrevious(rr, chkWrapR.Checked);
|
||
else
|
||
foundRange = FindReplace.FindNext(rr, chkWrapR.Checked);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (chkSearchSelectionF.Checked)
|
||
{
|
||
if (_searchRange.CpMin == _searchRange.CpMax)
|
||
_searchRange = new CharacterRange(_scintilla.Selections[0].Start, _scintilla.Selections[0].End);
|
||
|
||
if (searchUp)
|
||
{
|
||
string textToFind = fcReplace.SearchMode==1 ? FindReplace.Transform(txtFindR.Text) : txtFindR.Text;
|
||
foundRange = FindReplace.FindPrevious(textToFind, chkWrapR.Checked, GetSearchFlags(), _searchRange);
|
||
}
|
||
else
|
||
{
|
||
string textToFind = fcReplace.SearchMode == 1 ? FindReplace.Transform(txtFindR.Text) : txtFindR.Text;
|
||
foundRange = FindReplace.FindNext(textToFind, chkWrapR.Checked, GetSearchFlags(), _searchRange);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_searchRange = new CharacterRange();
|
||
if (searchUp)
|
||
{
|
||
string textToFind = fcReplace.SearchMode == 1 ? FindReplace.Transform(txtFindR.Text) : txtFindR.Text;
|
||
foundRange = FindReplace.FindPrevious(textToFind, chkWrapF.Checked, GetSearchFlags());
|
||
}
|
||
else
|
||
{
|
||
string textToFind = fcReplace.SearchMode == 1 ? FindReplace.Transform(txtFindR.Text) : txtFindR.Text;
|
||
foundRange = FindReplace.FindNext(textToFind, chkWrapF.Checked, GetSearchFlags());
|
||
}
|
||
}
|
||
}
|
||
return foundRange;
|
||
}
|
||
|
||
private void FindReplaceDialog_Activated(object sender, EventArgs e)
|
||
{
|
||
this.Opacity = 1.0;
|
||
}
|
||
|
||
private void FindReplaceDialog_Deactivate(object sender, EventArgs e)
|
||
{
|
||
this.Opacity = 0.6;
|
||
}
|
||
|
||
private void MnuRecentFindF_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||
{
|
||
//Insert the string value held in the menu items Tag field (\t, \n, etc.)
|
||
if (e.ClickedItem.Text == "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ")
|
||
{
|
||
MruFind.Clear();
|
||
}
|
||
else
|
||
{
|
||
txtFindF.Text = e.ClickedItem.Tag.ToString();
|
||
}
|
||
}
|
||
|
||
private void MnuRecentFindR_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||
{
|
||
//Insert the string value held in the menu items Tag field (\t, \n, etc.)
|
||
if (e.ClickedItem.Text == "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ")
|
||
{
|
||
MruFind.Clear();
|
||
}
|
||
else
|
||
{
|
||
txtFindR.Text = e.ClickedItem.Tag.ToString();
|
||
}
|
||
}
|
||
|
||
private void MnuRecentReplace_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||
{
|
||
//Insert the string value held in the menu items Tag field (\t, \n, etc.)
|
||
if (e.ClickedItem.Text == "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ")
|
||
{
|
||
MruReplace.Clear();
|
||
}
|
||
else
|
||
{
|
||
txtReplace.Text = e.ClickedItem.Tag.ToString();
|
||
}
|
||
}
|
||
|
||
private void MnuExtendedCharFindR_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||
{
|
||
//Insert the string value held in the menu items Tag field (\t, \n, etc.)
|
||
txtFindR.SelectedText = e.ClickedItem.Tag.ToString();
|
||
}
|
||
|
||
private void MnuExtendedCharReplace_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||
{
|
||
//Insert the string value held in the menu items Tag field (\t, \n, etc.)
|
||
txtReplace.SelectedText = e.ClickedItem.Tag.ToString();
|
||
}
|
||
|
||
private CharacterRange ReplaceNext(bool searchUp)
|
||
{
|
||
Regex rr = null;
|
||
CharacterRange selRange = new CharacterRange(_scintilla.Selections[0].Start, _scintilla.Selections[0].End);
|
||
|
||
// We only do the actual replacement if the current selection exactly
|
||
// matches the find.
|
||
if (selRange.CpMax - selRange.CpMin > 0)
|
||
{
|
||
if (fcReplace.SearchMode==2)
|
||
{
|
||
rr = new Regex(txtFindR.Text, GetRegexOptions());
|
||
string selRangeText = Scintilla.GetTextRange(selRange.CpMin, selRange.CpMax - selRange.CpMin + 1);
|
||
|
||
if (selRange.Equals(FindReplace.Find(selRange, rr, false)))
|
||
{
|
||
// If searching up we do the replacement using the range object.
|
||
// Otherwise we use the selection object. The reason being if
|
||
// we use the range the caret is positioned before the replaced
|
||
// text. Conversely if we use the selection object the caret will
|
||
// be positioned after the replaced text. This is very important
|
||
// becuase we don't want the new text to be potentially matched
|
||
// in the next search.
|
||
if (searchUp)
|
||
{
|
||
_scintilla.SelectionStart = selRange.CpMin;
|
||
_scintilla.SelectionEnd = selRange.CpMax;
|
||
_scintilla.ReplaceSelection(rr.Replace(selRangeText, txtReplace.Text));
|
||
_scintilla.GotoPosition(selRange.CpMin);
|
||
}
|
||
else
|
||
Scintilla.ReplaceSelection(rr.Replace(selRangeText, txtReplace.Text));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
string textToFind = fcReplace.SearchMode==1 ? FindReplace.Transform(txtFindR.Text) : txtFindR.Text;
|
||
var aa = FindReplace.Find(selRange, textToFind, false);
|
||
if (selRange.Equals(FindReplace.Find(selRange, textToFind, false)))
|
||
{
|
||
// If searching up we do the replacement using the range object.
|
||
// Otherwise we use the selection object. The reason being if
|
||
// we use the range the caret is positioned before the replaced
|
||
// text. Conversely if we use the selection object the caret will
|
||
// be positioned after the replaced text. This is very important
|
||
// becuase we don't want the new text to be potentially matched
|
||
// in the next search.
|
||
if (searchUp)
|
||
{
|
||
string textToReplace = fcReplace.SearchMode==1 ? FindReplace.Transform(txtReplace.Text) : txtReplace.Text;
|
||
_scintilla.SelectionStart = selRange.CpMin;
|
||
_scintilla.SelectionEnd = selRange.CpMax;
|
||
_scintilla.ReplaceSelection(textToReplace);
|
||
|
||
_scintilla.GotoPosition(selRange.CpMin);
|
||
}
|
||
else
|
||
{
|
||
string textToReplace = fcReplace.SearchMode == 1 ? FindReplace.Transform(txtReplace.Text) : txtReplace.Text;
|
||
Scintilla.ReplaceSelection(textToReplace);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return FindNextR(searchUp, ref rr);
|
||
}
|
||
|
||
#endregion Methods
|
||
|
||
private void TxtFindF_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
if(e.KeyCode== Keys.Enter)
|
||
{
|
||
btnFindNextF.PerformClick();
|
||
}
|
||
}
|
||
|
||
private void TxtFindR_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
if (e.KeyCode == Keys.Enter)
|
||
{
|
||
btnFindNextR.PerformClick();
|
||
}
|
||
}
|
||
|
||
private void TxtReplace_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
if (e.KeyCode == Keys.Enter)
|
||
{
|
||
btnReplaceNext.PerformClick();
|
||
}
|
||
}
|
||
|
||
private void BtnFileFindAll_Click(object sender, EventArgs e)
|
||
{
|
||
var folder = TxtSearchPath.Text;
|
||
if(!System.IO.Directory.Exists(folder))
|
||
{
|
||
MessageBox.Show("Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD>", "<22><>ʾ", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||
return;
|
||
}
|
||
if(TxtFileSearchText.Text.Length==0)
|
||
{
|
||
MessageBox.Show("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>Ϊ<EFBFBD>ա<EFBFBD>", "<22><>ʾ", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||
return;
|
||
}
|
||
if (!DesignMode)
|
||
{
|
||
ryCommon.Ini ini = new ryCommon.Ini(Application.StartupPath + "\\UserDb\\FindReplace.ini");
|
||
ini.WriteIni("FileFind", "Exts", TxtFileType.Text);
|
||
ini.WriteIni("FileFind", "SkipDirName_On", ChkSkipDirName.Checked);
|
||
ini.WriteIni("FileFind", "SkipDirName_Text", CbbSkipDirName.Text);
|
||
ini.WriteIni("FileFind", "SearchSubDir", ChkSubDir.Checked);
|
||
ini.WriteIni("FileFind", "IgnoreBinExt", ChkIgnoreBinExt.Checked);
|
||
ini.WriteIni("FileFind", "SearchHiddenDir", ChkHiddenDir.Checked);
|
||
ini.WriteIni("FileFind", "LimitFileSize_On", ChkLimitFileSize.Checked);
|
||
ini.WriteIni("FileFind", "LimitFileSize_Value", NumLimitFileSize.Value);
|
||
}
|
||
FrmFinding frm = new FrmFinding();
|
||
frm.SearchConfig.FindText = TxtFileSearchText.Text;
|
||
frm.SearchConfig.ReplaceText = TxtFileReplaceText.Text;
|
||
frm.SearchConfig.SearchDir= folder;
|
||
if (TxtFileType.Text.IndexOfEx("(") >= 0)
|
||
{
|
||
frm.SearchConfig.Exts = TxtFileType.Text.GetStr("(",")");
|
||
}
|
||
else
|
||
{
|
||
frm.SearchConfig.Exts = TxtFileType.Text;
|
||
}
|
||
frm.SearchConfig.SkipDirName = ChkSkipDirName.Checked ? CbbSkipDirName.Text : "";
|
||
frm.SearchConfig.LimitFileSize = ChkLimitFileSize.Checked ? (NumLimitFileSize.Value.ToInt() * 1024 * 1024) : 0;
|
||
frm.SearchConfig.SearchSubDir = ChkSubDir.Checked;
|
||
frm.SearchConfig.IgnoreBinExt = ChkIgnoreBinExt.Checked;
|
||
frm.SearchConfig.SearchHiddenDir = ChkHiddenDir.Checked;
|
||
frm.SearchConfig.RegexOptions = fcFile.GetRegexOptions();
|
||
frm.SearchConfig.SearchFlags = fcFile.GetSearchFlags();
|
||
frm.ShowDialog();
|
||
}
|
||
public string DefSearchDir { get; set; } = "";
|
||
private void ChkCurDir_CheckedChanged(object sender, EventArgs e)
|
||
{
|
||
if (ChkCurDir.Checked)
|
||
{ TxtSearchPath.Text = DefSearchDir; }
|
||
TxtSearchPath.Enabled = !ChkCurDir.Checked;
|
||
}
|
||
|
||
private void BtnBrowser_Click(object sender, EventArgs e)
|
||
{
|
||
if(folderBrowserDialog1.ShowDialog()==DialogResult.OK)
|
||
{
|
||
TxtSearchPath.Text = folderBrowserDialog1.SelectedPath;
|
||
}
|
||
}
|
||
|
||
private void txtFindF_TextChanged(object sender, EventArgs e)
|
||
{
|
||
//SyncTextUI();
|
||
}
|
||
|
||
private void txtFindR_TextChanged(object sender, EventArgs e)
|
||
{
|
||
//SyncTextUI();
|
||
}
|
||
|
||
private void txtReplace_TextChanged(object sender, EventArgs e)
|
||
{
|
||
//SyncTextUI();
|
||
}
|
||
|
||
private void FindReplaceDialog_Load(object sender, EventArgs e)
|
||
{
|
||
|
||
}
|
||
|
||
private void txtFindR_SelectedIndexChanged(object sender, EventArgs e)
|
||
{
|
||
|
||
}
|
||
|
||
private void TxtFileType_SelectedIndexChanged(object sender, EventArgs e)
|
||
{
|
||
|
||
}
|
||
|
||
private void btnFileReplaceAll_Click(object sender, EventArgs e)
|
||
{
|
||
|
||
}
|
||
}
|
||
} |