2013-07-05 37 views
2

我有一個名爲SupplierName和ProductName的文本框,位於groupbox1gridview1之間,看起來像intellisense。在不同容器中動態顯示其他控件旁邊的控件

例如,當我在SupplierName中輸入「s」時,gridview1會從數據庫中獲取以「s」開頭的客戶名稱,並且它像智能感知一樣被定位在SupplierName文本框中當前單詞的底部。

它看起來罰款SupplierName文本,但文本框產品名稱是groupbox1 和我無法找到上groupbox1gridview1到附近出現產品名稱文本框。 它只出現在SupplierName文本框附近,即使我在ProductName文本框中輸入文本。

這裏是代碼,其中tb是採取當前正在輸入的文本的文本框的名稱文本參數:

int i = tb.SelectionStart; 
... 
Point pt = tb.GetPositionFromCharIndex(i); 
pt.Y += (int)Math.Ceiling(tb.Font.GetHeight()); 
pt.Y += 2; 
using (Graphics g = Graphics.FromHwnd(tb.Handle)) 
{ 
    SizeF size = g.MeasureString(tb.Text, tb.Font); 
    if (size.Width > tb.Width) 
    { 
     // float length = size.Width % txtintellisense.Width; 
     pt.X += tb.Width; 
    } 
    else 
    pt.X += (int)size.Width; 
} 
Point point = tb.Location; 
pt.X += point.X; 
pt.Y += point.Y; 
this.dGVinvisible.Location = pt; 
this.dGVinvisible.BringToFront(); 

回答

1

你可以試試這個..

Point point = tb.Location; 
Point point0 = GroupBox1.Location; 
pt.X += point.X + point0.X; 
pt.Y += point.Y + point0.Y; 
this.dGVinvisible.Location = pt; 

你可以通過設置DGV父母GroupBox1 .. dGVinvisible.Parent = GroupBox1

+0

@deva ..第一代碼會更好,如果它爲你工作。如果您選擇第二個選項,則應該在每個具有不同容器的控件上的每個GetFocus事件中設置DGV容器.. – matzone

+0

@deva ..它是父級屬性.. – matzone

+0

@deva ..如果此問題可以隨意投票幫助你.. X) – matzone

0
ProductName文本框的

Location相對於分組框,但你的代碼將其視爲是相對於表單。您需要通過向它們添加GroupBox座標來抵消座標。

pt.Offset(groupBox.Location); 
this.dGVinvisible.Location = pt; 
+0

謝謝您的回答 它真的有用,我 – deva

相關問題