- - PR -
コンボボックスの概観について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-06 17:51
お世話になります。
現在VB2005を使用して、フォームにコンボボックスを配置したWindowsアプリケーション を作成しています。 【コンボのプロパティ】 ComboBox.DropDownStyle = DropDownList ComboBox.FlatStyle = Flat 上記のようにプロパティを設定した場合に、コンボボックスの概観(外枠)は 白線となるのですが、これを黒線にしたいです。 プロパティではできそうになかったので、System.Windows.Forms.ComboBox を継承したコントロールを作成し、その中でonPaintメソッドをオーバーライドしようと 考えたのですが、onPaint自体に入っていないようでした。 Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) MyBase.OnPaint(e) ←ブレークポイントがヒットしませんでした。 ※ここでControlPaintクラスを使用して描画の予定 End Sub コンボボックスの外枠を黒線にしたいと思っています。 ご存知の方、ご教授お願い致します。 | ||||||||
|
投稿日時: 2008-02-06 18:48
こんばんは。
フラットスタイルのコンボボックス外枠は 白線(システムカラー)固定で描画してしまっているので、 どこかのプロパティをいじっても変更できなさそうです。 OnPaintをオーバーライドしても、ComboBoxクラス内でそもそも呼び出していないので無駄です。 自前で描画するにはタイミング的に、WndProcをオーバーライドするしかないでしょう。 ただしWindowsAPIの知識が必要となります。
WindowsAPIの知識がないのであれば、カスタムコントロール(継承コントロール)ではなく ユーザーコントロール(System.Windows.Forms.UserControlの継承クラス)にして ごまかすのがよいかと思います。 | ||||||||
|
投稿日時: 2008-02-07 08:34
Tdnr_Symさん返答ありがとうございます
OnPaintは呼ばれていなかったのですね・・・。常に発生するものだと思っていました。 WndProcのオーバーライドについては、@IT当のページで読んだりしていますが、 WindowsAPIの知識はあまりありません。 ユーザーコントロールの方も検討してみます。(これを機会にAPIについて調べてみます) ありがとうございました。 | ||||||||
|
投稿日時: 2008-02-08 17:40
ComboBoxのインスタンスに
SetStyle(ControlStyles.UserPaint, true); と設定するとOnPaintが呼ばれるようになりますよ。 | ||||||||
|
投稿日時: 2008-02-08 18:04
こんばんは。
あっ。ごめんなさい。私、大ウソ言ってました。 otfさんのおっしゃるとおりOnPaintが呼ばれる流れがありました。 ちゃんと調べて回答したつもりだったんですが。 ControlStyles.UserPaintを設定すると、 コンボボックス全体を描画してやらないといけないのかな? | ||||||||
|
投稿日時: 2008-02-08 19:49
ComboBoxRendererでなんとかなるかなと思ったけどこれFlat対応してなかったですね。 やっぱりこの方法だと全体を描写する手間はかかるかもしれません。 |
1