----------------------------------------------------------
(開発・実行環境)
Microsoft Visual Studio 2005 Tools for Applications
Microsoft Visual Basic 2005
----------------------------------------------------------
取得したデータをComboBoxに表示したいけど変更はかけたくない。
要はReadOnly=Trueな状態にしたい。
でもReadOnlyプロパティは無いし、Enabled=Falseにしたら文字読みにくいし。。
ってわけで先輩が素敵な関数(イベントのサブルーチン)を与えてくれた♪
ComboBoxをEnabled=Falseのときに、ComboBox内の要素を指定した色に描画してくれるイベント。
??? Private Sub cboAssetsDiv_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles cboAssetsDiv.DrawItem
??????? If Me.cboAssetsDiv.Enabled = True Then
??????????? 'Me.cboAssetsDiv.DrawMode = DrawMode.Normal
??????????? Exit Sub
??????? End If
??????? '背景を描画する
??????? '項目が選択されている時は強調表示される
??????? e.DrawBackground()
??????? Dim cmb As ComboBox = CType(sender, ComboBox)
??????? '項目に表示する文字列
??????? Dim txt As String
??????? If cmb.FindString(cmb.Text) < 0 Then
??????????? cmb.Items.Add(cmb.Text)
??????????? 'cmb.Items.Add(dt)
??????????? cmb.DropDownStyle = ComboBoxStyle.DropDown
??????? End If
??????? txt = cmb.Text
??????? '使用するブラシ
??????? Dim b As Brush = New SolidBrush(SET_COLOR)
??????? '文字列を描画する
??????? Dim ym As Single = (e.Bounds.Height - _
??????????? e.Graphics.MeasureString(txt, cmb.Font).Height) / 2
??????? e.Graphics.DrawString(txt, cmb.Font, b, _
??????????? e.Bounds.X, e.Bounds.Y + ym)
??????? b.Dispose()
??? End Sub
SET_COLORに文字色をセット。
DrawItemイベントは、DrawModeプロパティがNormalじゃないときに発生する。(デフォルトはNormal)
制御したいタイミングで、Enabled と DrawMode を切り替えて、上記のDrawItemイベントを走らせることで、表題の件を実現できるかと。
Enabled=Trueでは走らないようにしましょう。面白いことになるから・・・w
まぁ、ここまですんの?って感じだけど。
ComboBoxの読み取り専用制御、色々やり方はあるかと思いますが、一つありがたいソースをGet。