private void ChooseMemberFromIntellisense(bool canChooseWhenEmpty) { if (!intellisense.Visible) { return; } var selectedMember = intellisense.GetSelectedMember(); if (selectedMember != null) { // replace current part with selected member var typeAndAfter = StatementParser.GetTypeOfCurrentStatement(txtEvaluate.Text, txtEvaluate.SelectionStart - 1, thisObject, false); if ((!canChooseWhenEmpty && string.IsNullOrEmpty(typeAndAfter.Value)) || StatementParser.GetStringsNotToAutocompleteOn().Contains(typeAndAfter.Value)) { return; } string name; string alias = AliasManager.Instance.GetAlias(selectedMember); if (!string.IsNullOrEmpty(alias)) { name = alias; } else { name = selectedMember.Name; } if (name.ToLower().StartsWith(txtEvaluate.Text.Substring(txtEvaluate.Text.Length - typeAndAfter.Value.Length).ToLower())) { txtEvaluate.Text = txtEvaluate.Text.Substring(0, txtEvaluate.Text.Length - typeAndAfter.Value.Length) + name; txtEvaluate.SelectionStart = txtEvaluate.TextLength; } intellisense.Hide(); } }
private void txtEvaluate_TextChanged(object sender, EventArgs e) { try { if (txtEvaluate.SelectionStart - 1 >= txtEvaluate.Text.Length) { return; } var typeAndAfter = StatementParser.GetTypeOfCurrentStatement(txtEvaluate.Text, txtEvaluate.SelectionStart - 1, thisObject, false); if (typeAndAfter.Key != null) { if (intellisense.CurrentType != typeAndAfter.Key) { Type fromType = typeAndAfter.Key; UpdateIntellisense(fromType); } if (txtEvaluate.Text.EndsWith(".")) { ShowIntellisense(); } intellisense.SelectCurrentPart(typeAndAfter.Value); } } catch (Exception) { if (intellisense.Visible) { intellisense.SetItems(new List <IntellisensePopup.ListItem>()); intellisense.CurrentType = null; intellisense.Hide(); } } try { if (txtEvaluate.SelectionStart - 1 >= txtEvaluate.Text.Length) { return; } var methods = StatementParser.GetCurrentMethodOverloads(txtEvaluate.Text, txtEvaluate.SelectionStart - 1, thisObject); if (methods.Count > 0) { string methodSignatures = string.Join(Environment.NewLine, methods.Select(m => m.ToSignatureString()).ToArray()); Point p = txtEvaluate.PointToScreen(txtEvaluate.GetPositionFromCharIndex(txtEvaluate.SelectionStart - 1)); p.Offset(16, -16 + -methods.Count * 10); p.Offset(-this.Location.X, -this.Location.Y); methodsToolTip.Show(methodSignatures, this, p); } else { methodsToolTip.Hide(this); } } catch (Exception) { methodsToolTip.Hide(this); } }