DOBON.NET DOBON.NETプログラミング掲示板過去ログ

リストボックスの反転表示色について

環境/言語:[VB2005 WindowsXP]
分類:[.NET]

お世話になります。
VB2005で開発を行っているのですが、皆さんのお知恵を拝借できないでしょうか。

リストボックスを用意した際、反転表示した時の色(紺)を別の色に変更したいのですが、どうやって設定すればいいのでしょうか?
プロパティではなさそうなので、なんらか組み込む必要があるように思います。

ヒントだけでも結構ですので、どなたかよろしくお願いいたします。

ついで、選択した際にフォーカスしたところが点線で表示されているのですが、これも見えなくすることができるのでしょうか?
(Dobonさんのサイトにあった例から、DataGridViewで同様の制御ができるので、もしかしたら、と思い質問させてもらいました。)

もしできるのであれば、ヒントだけでも教えていただければ幸いです。

宜しくお願いいたします。
■No24617に返信(sakuさんの記事)
> 反転表示した時の色(紺)を別の色に変更したいのですが、
> どうやって設定すればいいのでしょうか?
> プロパティではなさそうなので、なんらか組み込む必要があるように思います。

DrawItem イベントを用いて、オーナードローしてみてください。
2009/05/26(Tue) 09:29:14 編集(投稿者)

魔界の仮面弁士さん、ご返答ありがとうございました。

オーナードローで背景色を制御できるんでしょうか?
e.graphicsで描画を行っていけばいいように思ったのですが、
プロパティには、それに関連した内容はないようでした。

もう少し調べてみようと思います。
他にヒントがあるようでしたら教えて下さいませんか。
わがまま申し訳ないです。

よろしくお願いします。


■No24619に返信(魔界の仮面弁士さんの記事)
> ■No24617に返信(sakuさんの記事)
>>反転表示した時の色(紺)を別の色に変更したいのですが、
>>どうやって設定すればいいのでしょうか?
>>プロパティではなさそうなので、なんらか組み込む必要があるように思います。
>
> DrawItem イベントを用いて、オーナードローしてみてください。
2009/05/26(Tue) 10:49:00 編集(投稿者)

■No24625に返信(sakuさんの記事)
> オーナードローで背景色を制御できるんでしょうか?
すべての描画処理を開発者が自由に決定できます。もちろん背景色も制御できます。


> e.graphicsで描画を行っていけばいいように思ったのですが、
> プロパティには、それに関連した内容はないようでした。
プロパティではなく、どちらかというとメソッドです。
指定された座標に、任意の色/ペンなどを用いて描画していきます。


> 他にヒントがあるようでしたら教えて下さいませんか。
DrawItem イベントについて調べてみると、各種サンプルが見つかるかと。


たとえば、このサイトにあるオーナードローサンプルに、
http://dobon.net/vb/dotnet/control/lbownerdraw.html
さらに別の描画サンプル等を足し加えて、
http://dobon.net/vb/dotnet/graphics/lineargradientbrush.html
こんな感じにしてみるとか。


Private Sub ListBox1_DrawItem1(ByVal sender As Object, _
  ByVal e As DrawItemEventArgs) Handles ListBox1.DrawItem

 Dim lb As ListBox = DirectCast(sender, ListBox)
 Dim txt As String = lb.GetItemText(lb.Items(e.Index))
 Dim selected As Boolean = CBool(e.State And DrawItemState.Selected)

 If Not selected Then
  e.DrawBackground()
  'Using b As New SolidBrush(Color.FromArgb(255, Color.FromArgb(QBColor(e.Index Mod 7))))
  Using b As New SolidBrush(ColorTranslator.FromOle(QBColor(e.Index Mod 16)))
   e.Graphics.DrawString(txt, e.Font, b, e.Bounds.X, e.Bounds.Y)
  End Using
 Else
  Using b As New System.Drawing.Drawing2D.LinearGradientBrush( _
    e.Bounds, Color.Gold, Color.DeepPink, _
    System.Drawing.Drawing2D.LinearGradientMode.Horizontal)
   e.Graphics.FillRectangle(b, e.Bounds)
  End Using
  Using b As New SolidBrush(Color.DarkGreen), f As New Font(e.Font, FontStyle.Bold)
   e.Graphics.DrawString(txt, f, b, e.Bounds.X, e.Bounds.Y)
  End Using
 End If
 e.DrawFocusRectangle()
End Sub
2009/05/26(Tue) 10:50:27 編集(投稿者)

魔界の仮面弁士さん、たびたびの助言ありがとうございました。

FillRectangleを使おうと試みた事はあったんですが、上手く表示ができませんでした。
こういう風に書くと表示ができるんですね。
また一つ勉強になりました。

これを元にいろいろと手を加えてみようと思います。
ありがとうございました。

グラデーションの色表示、何かに使えそうです。
こちらも感謝です。

ありがとうございました。


■No24630に返信(魔界の仮面弁士さんの記事)
> ■No24625に返信(sakuさんの記事)
>>オーナードローで背景色を制御できるんでしょうか?
> すべての描画処理を開発者が自由に決定できます。もちろん背景色も制御できます。
>
>
>>e.graphicsで描画を行っていけばいいように思ったのですが、
>>プロパティには、それに関連した内容はないようでした。
> プロパティではなく、どちらかというとメソッドです。
> 指定された座標に、任意の色/ペンなどを用いて描画していきます。
>
>
>>他にヒントがあるようでしたら教えて下さいませんか。
> DrawItem イベントについて調べてみると、各種サンプルが見つかるかと。
>
>
> たとえば、このサイトのサンプルにある
> http://dobon.net/vb/dotnet/control/lbownerdraw.html
> に手を加えて、こんな感じにしてみるとか。
>
> Private Sub ListBox1_DrawItem1(ByVal sender As Object, _
> ByVal e As DrawItemEventArgs) Handles ListBox1.DrawItem
>
> Dim lb As ListBox = CType(sender, ListBox)
> Dim selected As Boolean = CBool(e.State And DrawItemState.Selected)
>
> Dim b As Brush
> If Not selected Then
> e.DrawBackground()
> b = New SolidBrush(Color.FromArgb(255, Color.FromArgb(QBColor(e.Index Mod 7))))
> Else
> Using br As New System.Drawing.Drawing2D.LinearGradientBrush( _
> e.Bounds, Color.Gold, Color.DeepPink, _
> System.Drawing.Drawing2D.LinearGradientMode.Horizontal)
> e.Graphics.FillRectangle(br, e.Bounds)
> End Using
> b = New SolidBrush(Color.DarkGreen)
> End If
> Dim txt As String = lb.GetItemText(lb.Items(e.Index))
> e.Graphics.DrawString(txt, e.Font, b, e.Bounds.X, e.Bounds.Y)
> b.Dispose()
> e.DrawFocusRectangle()
> End Sub
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板