2011-12-16 14 views
1

添付の画像ではっきりしています。写真のリストボックスは、自動補完のように機能し、入力中にユーザーに提案を表示します。問題は、このリストボックスの下部が他のコントロールの下にあり、このリストボックスの垂直スクロールバーの下向き矢印が見えないことです。どのように他のコントロールの上にそれを保持することができますか?他のコントロールの上にリストボックスを表示する

enter image description here

+0

'ListBox'は何でもホストされていますか?すなわち、ダイアログまたはユーザコントロール? –

+0

はい、Splitter、SpliContainerにあります – Bohn

答えて

2

ListBoxの親が正しくありません。あなたはスプリッターパネルを親として望んでいません。それはそれをクリップします。あなたはそれをデザイナーに簡単に与えることはできません。 View +(他のWindows)+ドキュメントのアウトラインを使用します。 ListBoxを分割パネルからフォームにドラッグします。

1

あなたの写真が表示されないので、私はここで推測を作ってるんだが、あなたはListBox.BringToFront()またはListBox.SetChildIndex()のようなものを使用することができますか?私は

Bring Winforms control to front

私はあなたがが、問題のリストボックスへの直接アクセスを持っていない場合、それはあなたに多くの助けにはなりません推測...

1

になります。これは一種の、これと同じ質問ですしかし、あなたのListBoxコントロールをフォームに追加するのは間違いです。私はあなたがそれが表示されている場所内でそれを追加していると推測しているので、重複するコントロールはコンテナの他の部分の内側にあります。他のすべてのコントロールのコントロールを表示する場合、そのコントロールはコンテナエリア全体に渡る必要があります。したがって、あなたの「核型エントリー」コンテナの子コントロールの代わりに、3つのフォームセクションすべての親コンテナの子である必要があります。

1

リストボックスを別のフォームに配置し、補完リストが必要なときはいつでもフォームを起動/表示できます。これにより、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?から来ています。

関連する問題