C# 在键入时显示类似Intellisense的窗口(无法获得正确的坐标)

C# 在键入时显示类似Intellisense的窗口(无法获得正确的坐标),c#,.net,winforms,C#,.net,Winforms,我试图在文本的最后一个字符的正下方显示一个类似intellisense的小窗口(这是一个小窗体),但在我当前的代码中,它的坐标看起来是随机的,不是很精确。任何帮助都会得到报答 当我在键入时按Alt+1(以显示类似IntelliSense的窗口)时,我将此代码称为: shortcuts.Location = GetPoint((TextBox)tabControl1.SelectedTab.Controls[0]); shortcuts.Show(this); 获得坐标的女生是: private

我试图在文本的最后一个字符的正下方显示一个类似intellisense的小窗口(这是一个小窗体),但在我当前的代码中,它的坐标看起来是随机的,不是很精确。任何帮助都会得到报答

当我在键入时按Alt+1(以显示类似IntelliSense的窗口)时,我将此代码称为:

shortcuts.Location = GetPoint((TextBox)tabControl1.SelectedTab.Controls[0]);
shortcuts.Show(this);
获得坐标的女生是:

private Point GetPoint(TextBox textBoxControl)
        {
            Graphics graphics = Graphics.FromHwnd(textBoxControl.Handle);
            SizeF size = graphics.MeasureString(textBoxControl.Text.Substring(0,
                         textBoxControl.SelectionStart), textBoxControl.Font);
            Point coord = new Point((int)size.Width + textBoxControl.Location.X,
                          (int)size.Height + 200 + textBoxControl.Location.Y);
            return coord;
        }

工作代码 我承认可能有更好的方法,但这对我来说非常有效:

private Point GetPoint(TextBox textBoxControl)
{
    Graphics graphics = Graphics.FromHwnd(textBoxControl.Handle);
    SizeF size = graphics.MeasureString(textBoxControl.Text.Substring(0,
                 textBoxControl.SelectionStart), textBoxControl.Font);
    Point coord = new Point(this.Left + (int)size.Width + textBoxControl.Location.X + 5,
                  this.Location.Y + 25 + toolStrip1.Height + tabControl1.Top + (int)size.Height + tabControl1.Top + textBoxControl.Location.Y + 25);
    return coord;
}
然而,出于某种原因,第一次调用此方法时,它总是出现在某个随机位置——尽管随后每次调用此方法都会导致窗口被放置在它应该放置的位置;就在当前文本行的下方,并水平对齐,以便窗口正好位于文本框中最后一个字符的后面

试试这个:

TextBox tb = (TextBox)tabControl1.SelectedTab.Controls[0];
Point thePoint = GetPoint(tb);
shortcuts.Location = tb.PointToClient(tabControl1.PointToScreen(thePoint));  //assuming "this" is the form itself

在GetPoint()方法中,将“200+”替换为tabControl1.GetTabRect(0).Height。我还必须在X和Y上添加5作为填充,因为tabControl有一些间距。

有多少差异?减少一个字符,还是减少表单的一半?@DonBoitnott它减少了表单宽度的一半。也许你应该使用textBoxControl.PointToScreen作为偏移基础。I“我必须查找指向屏幕的点,因为我不熟悉它-谢谢你的提示!:)@Jase抱歉,我忘了解释TabControl本身。已编辑。我刚刚在您的答案中尝试了最新的代码,它总是显示在屏幕的最上方,并且它只水平移动,但移动量也不正确。文本框的深度很重要,因为您可以从编辑中收集信息。tabControl1是在窗体上还是在另一个控件(如拆分器或面板)中?tabControl1在主窗体上(Form1>tabControl1>SelectedTab>TextBox)-它不在任何容器中,只在窗体上。啊,悬念…请告诉我!