2012-01-12 12 views
1

は私が画像を使用している場合、それは最高のだろうと思う: enter image description here窓の外ペイント(およびコントロール)

私は私のコントロールはDateTimePickerのカレンダーのように窓の外になり得ることが必要です。私は方法でpanelKalendar = new PanelDoubleBuffer();を使用しています:void panelKalendar_Paint(object sender, PaintEventArgs e)私はすべてをペイントします。しかし、それは窓に絵を描き、他のすべてのコントロールの下にある。 DateTimePickerで使用されている「効果」を取得するにはどうすればよいですか?

+0

[親コントロールの境界を越えて拡張するコントロール]の複製が可能です。(http://stackoverflow.com/questions/2833683/control-extending-beyond-border-of-parent-control) –

答えて

2

コンボボックスのドロップダウンリスト(およびカレンダーコントロールのドロップダウンパネルも可能)は、デスクトップの子ウィンドウです。それはあなたがしなければならないことです:ボーダーレスフォームの中にコントロールを入れ子にし、そのフォームをヌルの親にして、アプリケーションウィンドウの子ではなくトップレベルのウィンドウにします。

フォームは最上位のウィンドウなので、フォームのローカル座標ではなく、画面座標でその位置を指定する必要があります。これらの座標は、PointToScreenメソッドを使用して取得できます。

+0

子供が欲しくないまったくの窓!それが問題です。トップレベルのウィンドウが必要です。 [親と所有者を混同しないでください](http://blogs.msdn.com/b/oldnewthing/archive/2010/03/15/9978691.aspx)。 –

+0

@CodyGray私が間違っているかもしれませんが、私に説明してください。「デスクトップの子」と言うと、NULLの親で作成されたウィンドウではありませんか?これはトップレベルのウィンドウと同じではありませんか? –

+0

それは彼らが言うときに何人かの人々が意味するかもしれないかもしれないが、それをどう解釈するかではない。デスクトップの子ウインドウは、文字通り、親としてデスクトップウインドウを持つウインドウです。たとえば、 'SetParent'を呼び出してデスクトップウインドウを指定したトップレベルウインドウです。そして、このような状況は、モーダルダイアログを表示するために 'MessageBox'のようなものを呼び出すと致命的になります。 –

0

私はそれが親(form)境界で切り捨てられます原因あなたは、(それはあなたが実際にやっていることである)あなたのform制御して欲しいものを達成することはできません怖いです。

芋、あなたは正確panelが表示されるようになります代わりに表示されますseprate WidnowdFormコントロールを使用しようとすることができます。

これが役に立ちます。

関連する問題