在输入时显示一个类似智能感知的窗口(不能正确输入)
本文关键字:输入 感知 窗口 不能 智能 一个 显示 | 更新日期: 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有一些间距。