在输入时显示一个类似智能感知的窗口(不能正确输入)

本文关键字:输入 感知 窗口 不能 智能 一个 显示 | 更新日期: 2023-09-27 18:15:58

我试图显示一个小的智能感知窗口(它是一个小的形式),下面的文本的最后一个字符,但与我目前的代码,其坐标似乎是随机的,不是很准确。如有任何帮助,我将不胜感激。

当我在输入时按Alt+1(以显示智能窗口),我调用以下代码:

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有一些间距。