void _OnGotLostFocus(bool got, _SciTextBox tb) { if (!_cRegex.Checked) { return; } if (got) { //use timer to avoid temporary focus problems, for example when tabbing quickly or closing active Regex window ATimer.After(70, _ => { if (tb.Focused) { _ShowRegexInfo(tb, false); } }); } else { if (_regexWindow.Window.Visible) { var c = AWnd.ThisThread.FocusedControl; if (c == null || (c != _tFind && c != _tReplace && c != _regexWindow.Window && c.TopLevelControl != _regexWindow.Window)) { _regexWindow.Hide(); } } } }
void _ShowRegexInfo(_SciTextBox tb, bool F1) { if (_regexWindow == null || !_cRegex.Checked) { return; } if (_regexWindow.UserClosed) { if (!F1) { return; } _regexWindow.UserClosed = false; } if (!_regexWindow.Window.IsHandleCreated) { var r = ((AWnd)this).Rect; r.Offset(0, -20); _regexWindow.Show(Program.MainForm, r, true); } else { _regexWindow.Window.Show(); } _regexWindow.InsertInControl = tb; bool replace = tb == _tReplace; var s = _regexWindow.CurrentTopic; if (s == "replace") { if (!replace) { _regexWindow.CurrentTopic = _regexTopic; } } else if (replace) { _regexTopic = s; _regexWindow.CurrentTopic = "replace"; } }