2011-12-28 15 views
4

私はWindowsを知っていますComboboxコントロールは何もa Textbox and a ListBoxglued togetherです。WinFormsのドロップダウンウィンドウをシミュレートするには?

私はWinFormsで同じことをシミュレートする必要があります。私は適切な効果を達成するために設定する必要がありますWindowsのウィンドウオプションを把握しようとしています。

  • ドロップダウンはchild windowすることはできません - それができるオーバーラップウィンドウ
  • owned window - - 所有するウィンドウが常にある、それはpop-up windowでなければなりませんそれ以外の場合は、親の面積概念的
  • にクリップされZオーダーの所有者の上に表示されます。所有者が破棄されると、所有されたウィンドウが自動的に破棄されます。オーナーが最小化されると、所有されたウィンドウは非表示になります。私がこれまで管理してきた最高のタスクバーに表示されないフォーム(this.ShowInTaskbar = false
  • this.TopMost = true

    • ボーダレス(this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
    • 最上位を作成することです

この境界線のない最上部のフォームには、「ドロップダウン」コントロールが含まれています。私は、ドロップダウンフォームがフォーカスを失ったときに私のドロップダウンを「隠す」:

this.Deactivate += new EventHandler(TheDropDownForm_Deactivate); 

void TheDropDownForm_Deactivate(object sender, EventArgs e) 
{ 
    ... 

    this.Close(); 
} 

を混乱のこの集合体は、十分に機能...

enter image description here

...「ドロップダウンが」取ることを除いて、所有者のフォームから遠ざけてください。

これは私の質問です。ポップアップウィンドウにはどのようなプロパティがありますか?

しかし、その後は、どのように私はそれがフォーカスを失ったとき、私のドロップダウンフォームを非表示にしない - それはを集中失うことができませんか?


.NETでコンボボックスのドロップダウンをシミュレートするにはどうすればよいですか?


注:は、あなたが何か他のものとの例のスクリーンショットでは何を参照してください混同しないでください。

enter image description here

+0

可能複製(http://stackoverflow.com/questions/353561/how-to-create-ac-sharp- [置いたC#のWinformsコントロールを作成する方法] winforms-control-that-hovers) –

+0

私はどこで/どのように/あなたがこれのようなものが必要なのか興味がありますか? WPFコントロールを使用することを検討することができます(操作がはるかに簡単で、WinFormsで使用できます)。 – tsells

+0

@HansPassant基本的には、コントロールが親を持っているので、答えは私には役に立たない。親があれば、それは親にクリップされます(つまり、 "ドロップダウン"はその親のフォームの外に存在することができます) –

答えて

3

は、同じ効果を得ることができToolStripControlHostToolStripDropDownを使用する:内容は、上記のスクリーンショットとは異なることができます - 私はどのように作成する「ドロップダウン」形式Winformsの中に求めています。this answerから

Private Sub ShowControl(ByVal fromControl As Control, ByVal whichControl As Control) 
    '\\ whichControl needs MinimumSize set:' 
    whichControl.MinimumSize = whichControl.Size 

    Dim toolDrop As New ToolStripDropDown() 
    Dim toolHost As New ToolStripControlHost(whichControl) 
    toolHost.Margin = New Padding(0) 
    toolDrop.Padding = New Padding(0) 
    toolDrop.Items.Add(toolHost) 
    toolDrop.Show(Me, New Point(fromControl.Left, fromControl.Bottom)) 
End Sub 
+0

'toolDrop.Show'を除いて、妥当と思われます。throws *トップレベルのコントロールをコントロールに追加することはできません。おそらく私は 'フォーム'を表示しようとしているからです。 –

+0

@IanBoyd真実ですが、 'TopLevel = false;'を作成してください。 – LarsTech

+0

'TopLevel'に優れています。ボーナス:「ポップアップ・シャドー」さえあります。残っている唯一の事は、「ポップアップ」が閉じられたときをどのように知っているかです。 'Deactivate'や' FormClosed'イベントは起動しません。 –