2013-05-30 23 views
2

我想顯示一個小型智能感知窗口(這是一個小窗體),正好在文本的最後一個字符的下方,但與我目前的代碼的座標看起來是隨機的,不是很準確。任何幫助都會受到歡迎。在打字時顯示類似智能感知的窗口(無法獲得正確的座標)

當我按下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; 
     } 

工作代碼

我承認這樣做可能有更好的方法,但這對m E:

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

有多少差異?由一個字符關閉,或關閉一半的形式? – DonBoitnott

+0

@DonBoitnott它大約有一半的表格寬度。 –

+0

也許你應該使用textBoxControl.PointToScreen作爲偏移量。 – sprinter252

回答

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。我還必須將5填充爲X和Y,因爲tabControl有一定的間距。

+0

@Jase對不起,我忘了解釋TabControl本身。編輯。 – DonBoitnott

+0

不用擔心:)我正在嘗試更新一個現在 –

+0

我剛剛在你的答案中嘗試了最新的代碼,它總是顯示在屏幕的最頂端,它只能水平移動,但不是正確的數量 –

相關問題