private void SearchButton_Click(object sender, EventArgs e)
{
//公式検索
Control pnl = ((Control)sender).Parent;
if (pnl == null) return;
string tbName = pnl.Parent.Text;
var tb = (PublicSearchTabModel)_statuses.Tabs[tbName];
ComboBox cmb = (ComboBox)pnl.Controls["comboSearch"];
ComboBox cmbLang = (ComboBox)pnl.Controls["comboLang"];
cmb.Text = cmb.Text.Trim();
// 検索式演算子 OR についてのみ大文字しか認識しないので強制的に大文字とする
bool Quote = false;
StringBuilder buf = new StringBuilder();
char[] c = cmb.Text.ToCharArray();
for (int cnt = 0; cnt < cmb.Text.Length; cnt++)
{
if (cnt > cmb.Text.Length - 4)
{
buf.Append(cmb.Text.Substring(cnt));
break;
}
if (c[cnt] == '"')
{
Quote = !Quote;
}
else
{
if (!Quote && cmb.Text.Substring(cnt, 4).Equals(" or ", StringComparison.OrdinalIgnoreCase))
{
buf.Append(" OR ");
cnt += 3;
continue;
}
}
buf.Append(c[cnt]);
}
cmb.Text = buf.ToString();
var listView = (DetailsListView)pnl.Parent.Tag;
var queryChanged = tb.SearchWords != cmb.Text || tb.SearchLang != cmbLang.Text;
tb.SearchWords = cmb.Text;
tb.SearchLang = cmbLang.Text;
if (string.IsNullOrEmpty(cmb.Text))
{
listView.Focus();
SaveConfigsTabs();
return;
}
if (queryChanged)
{
int idx = cmb.Items.IndexOf(tb.SearchWords);
if (idx > -1) cmb.Items.RemoveAt(idx);
cmb.Items.Insert(0, tb.SearchWords);
cmb.Text = tb.SearchWords;
cmb.SelectAll();
this.PurgeListViewItemCache();
listView.VirtualListSize = 0;
_statuses.ClearTabIds(tbName);
SaveConfigsTabs(); //検索条件の保存
}
this.GetPublicSearchAsync(tb);
listView.Focus();
}