我试图在文本的最后一个字符的正下方显示一个类似intellisense的小窗口(它是一个小窗体)但是使用我当前的代码,它的坐标似乎是随机的而且不是很准确。任何帮助都会被贬低。
当我按Alt + 1(在键入时显示类似intelliense的窗口时,我调用此代码:
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;
}
然而,出于某种原因,第一次调用此方法时,它总是只出现在某个随机位置 - 尽管每次对此方法的后续调用都会导致窗口被放置在应该放置的位置;在当前文本行的下方并水平对齐,以便窗口位于文本框中的最后一个字符之后。
答案 0 :(得分:3)
试试这个:
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有一些间距。