예제 #1
0
        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);
            }
        }