2011-12-16 18 views
1

在附圖中更清晰。圖片中的列表框可以像自動完成一樣工作,並在用戶輸入時向用戶顯示建議。問題是該列表框的底部會在其他控件下方,因此您無法看到該列表框的垂直滾動條的向下箭頭。我怎樣才能將它保持在其他控件之上?將列表框置於其他控件之上

enter image description here

+0

ListBox是否託管在任何東西?即對話或用戶控制? – 2011-12-16 15:03:42

回答

2

ListBox有錯誤的Parent。你不希望分離器面板作爲父母,它會剪輯它。你不能輕易地把它作爲設計師的正確父母。使用視圖+(其他窗口)+文檔大綱。將ListBox從分離器面板拖出到窗體。

1

我在這裏做一個猜測,因爲你的圖片沒有顯示出來,但是你可以使用像ListBox.BringToFront()ListBox.SetChildIndex()?這是一種類似的問題這一個:

Bring Winforms control to front

我想這不會幫助你多,如果你沒有在思想上的問題列表框中直接訪問..

1

我會想象一下,然而,你正在向表單添加你的ListBox控件並不完全正確。我猜你正在將它添加到它所顯示的位置,因此,與它重疊的控件位於容器的某個其他部分內。如果要顯示對所有其他控件的控件,那麼該控件將需要遍佈整個容器區域。因此,它不應該是您的「Karyotype Entry」容器的某個子控件,而應該是所有三個表單部分的父容器的子代。

1

您可以將ListBox放置在不同的窗體中,並在需要完成列表時調用/顯示窗體。這將節省您不必擔心ListBox是否最高。

這種方法的問題在於你必須編寫自動完成表單,以便它不會從主表單中竊取焦點。

這裏的代碼可以幫助你,以防萬一你想知道如何在沒有激活的情況下使表單顯示(竊取焦點)。

private const int SW_SHOWNOACTIVATE = 4; 
private const int HWND_TOPMOST = -1; 
private const uint SWP_NOACTIVATE = 0x0010; 

[DllImport("user32.dll", EntryPoint = "SetWindowPos")] 
static extern bool SetWindowPos(
    int hWnd,   // window handle 
    int hWndInsertAfter, // placement-order handle 
    int X,   // horizontal position 
    int Y,   // vertical position 
    int cx,   // width 
    int cy,   // height 
    uint uFlags);  // window positioning flags 

[DllImport("user32.dll")] 
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

static void ShowInactiveTopmost(Form frm) 
{ 
    ShowWindow(frm.Handle, SW_SHOWNOACTIVATE); 
    SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST, 
    frm.Left, frm.Top, frm.Width, frm.Height, 
    SWP_NOACTIVATE); 
} 

您也可以嘗試覆蓋ShowWithoutActivation屬性。

protected override bool ShowWithoutActivation 
{ 
    get { return true; } 
} 

注:這兩個代碼片段都來自這個問題:Show a Form without stealing focus?