|
■No76528 (魔界の仮面弁士 さん) に返信
回答ありがとうございます。
返答が遅くなってしまい、申し訳ありません。
> ■No76523 (巻 さん) に返信
> (1) 作成している「CstmComboBox クラス」は、DrawMode = DrawMode.OwnerDrawFixed な ComboBox である
>
> (2) そしてそれは、OnDrawItem メソッドがオーバーライドされている
> (または DrawItem イベントを利用している)
>
> (3) その中で、e.Graphics に DrawText メソッドで描画している
> (または、TextRenderer クラスで描画している)
>
> (4) ところが、描画すべきテキストを取得するところで、
> データバインドのことが考慮されていなかった…と予想!
確認してみたところ、まさに上記のもの(DrowItem)が問題でした。
Private Sub CmbBox_DrawItem(sender As Object, e As DrawItemEventArgs) Handles Me.DrawItem
Dim cmb As ComboBox = DirectCast(sender, ComboBox)
Dim gphc As Graphics = e.Graphics
Dim rect As Rectangle = e.Bounds
Dim dataTbl As DataTable = CType(Me.DataSource, DataTable)
'背景色
e.DrawBackground()
If e.Index = -1 Then Exit Sub
If cmb.Enabled Then
'アイテムが未選択の場合、背景を白くする
If (e.State And DrawItemState.Selected) = 0 Then
gphc.FillRectangle(New SolidBrush(SystemColors.Window), rect)
End If
Else
'無効の場合、グレーにする
gphc.FillRectangle(New SolidBrush(SystemColors.Control), rect)
End If
'---変更前---
'gphc.DrawString(cmb.Items(e.Index).ToString, e.Font, _
' New SolidBrush(e.ForeColor), rect)
'e.DrawFocusRectangle()
'---変更後---
gphc.DrawString(dataTbl.Rows(e.Index)("NAME").ToString, e.Font, _
New SolidBrush(e.ForeColor), rect)
e.DrawFocusRectangle()
End Sub
としたところ、正常に目的の動作に辿り着く事が出来ました。
また、ComboBoxのDrawModeをNomalに変更し、DrawItemイベントをコメントアウトした場合にも
ComboBoxInitのみで目的の動作を行うことが出来ました。
ありがとうございました。
>
>>メインフォーム(From1.vb)から呼び出しております。
> Form1.vb ではなく?
そうです、Form1.vbの間違いでした…。お恥ずかしい、すみません。
|