ComboBoxを読み取り専用にして、表示を見られるようにしたい [コントロール]
----------------------------------------------------------
(開発・実行環境)
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。
コメント 0