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。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

nice!の受付は締め切りました

コメント 0

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。