internal void DoTabSearch(string searchWord, bool caseSensitive, bool useRegex, SEARCHTYPE searchType)
{
var tab = this._statuses.Tabs[this._curTab.Text];
if (tab.AllCount == 0)
{
MessageBox.Show(Properties.Resources.DoTabSearchText2, Properties.Resources.DoTabSearchText3, MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
var selectedIndex = this._curList.SelectedIndices.Count != 0 ? this._curList.SelectedIndices[0] : -1;
int startIndex;
switch (searchType)
{
case SEARCHTYPE.NextSearch: // 次を検索
if (selectedIndex != -1)
startIndex = Math.Min(selectedIndex + 1, tab.AllCount - 1);
else
startIndex = 0;
break;
case SEARCHTYPE.PrevSearch: // 前を検索
if (selectedIndex != -1)
startIndex = Math.Max(selectedIndex - 1, 0);
else
startIndex = tab.AllCount - 1;
break;
case SEARCHTYPE.DialogSearch: // ダイアログからの検索
default:
if (selectedIndex != -1)
startIndex = selectedIndex;
else
startIndex = 0;
break;
}
Func<string, bool> stringComparer;
try
{
stringComparer = this.CreateSearchComparer(searchWord, useRegex, caseSensitive);
}
catch (ArgumentException)
{
MessageBox.Show(Properties.Resources.DoTabSearchText1, Properties.Resources.DoTabSearchText3, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
var reverse = searchType == SEARCHTYPE.PrevSearch;
var foundIndex = tab.SearchPostsAll(stringComparer, startIndex, reverse)
.DefaultIfEmpty(-1).First();
if (foundIndex == -1)
{
MessageBox.Show(Properties.Resources.DoTabSearchText2, Properties.Resources.DoTabSearchText3, MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
this.SelectListItem(this._curList, foundIndex);
this._curList.EnsureVisible(foundIndex);
}