北の窓から(芦田っち)

PC関連と私的雑感のブログ。
2015年7月10日、カッコ内に名前を加えました。昔の友だちに気付いてほしくて・・・

おやぢチップス (94):[VB.NET] ComboBox 項目の表示位置(右詰め、センタリングなど)

2018-01-24 14:20:21 | おやぢチップス
コンボボックス(ドロップダウン リスト)のお話。

  ★★ Visual Studio、VB.NET での画面・コードです ★★

Windows Forms でのコンボボックスでは項目の表示(配置)が左詰めになります。

  見た目はこんな感じです・・・
  

  これを右詰めや中央寄せ(センタリング)にしたいことがあります。

  HorizontalContentAlignment で右詰めにしたいのですが、
  残念ながら Windows Forms のコンボボックスにはそのプロパティがありません。

なのでコードで項目の配置を変更します。

  オーナードローというやつです。

左詰め(これが標準)、センタリング、右詰めをラジオボタンで選択して
項目の表示位置を変えることにしました。

  まずは画面をご覧いただきましょう・・・
  

デザイナーでの項目名(コントロールの名前)は次のとおり・・・
  

  # 自分の練習用フォームそのままを使っています。
     分かりやすい名称ではありませんが、ご容赦ください。

このコードは次のとおりです。

  ・・・ 行の先頭には全角のスペースを入れています。

--- ▼▼ ここから ---------------------------------------------------
' ---⦿ ラジオボタン: ComboBox 文字配置
Private Sub rbt_P9_RadioButton_CheckedChanged(sender As Object, e As EventArgs) Handles _
    rbt_P9_Left.CheckedChanged, rbt_P9_Right.CheckedChanged, rbt_P9_Center.CheckedChanged
    ' --- オーナードロー
    Me.cmb_P9_Alignment.DrawMode = DrawMode.OwnerDrawFixed
End Sub

' --- コンボボックス: 項目の表示位置
Private Sub cmb_P9_Alignment_DrawItem(sender As Object, e As DrawItemEventArgs) _
    Handles cmb_P9_Alignment.DrawItem
    ' ---
    Dim cbx As ComboBox = TryCast(sender, ComboBox)
    If (cbx IsNot Nothing) Then
        e.DrawBackground()
        If (e.Index >= 0) Then
            Dim sf As StringFormat = New StringFormat()
            ' --- ラジオボタンのチェック状態に応じる
            If (Me.rbt_P9_Left.Checked) Then
                sf.LineAlignment = StringAlignment.Near
                sf.Alignment = StringAlignment.Near
            End If
            If (Me.rbt_P9_Right.Checked) Then
                sf.LineAlignment = StringAlignment.Far
                sf.Alignment = StringAlignment.Far
            End If
            If (Me.rbt_P9_Center.Checked) Then
                sf.LineAlignment = StringAlignment.Center
                sf.Alignment = StringAlignment.Center
            End If
            ' ---
            Dim brush As Brush = New SolidBrush(cbx.ForeColor)
            If ((e.State And DrawItemState.Selected) = DrawItemState.Selected) Then
              brush = SystemBrushes.HighlightText
            End If
            e.Graphics.DrawString(cbx.Items(e.Index).ToString(), cbx.Font, brush, e.Bounds, sf)
        End If
    End If
End Sub
--- ▲▲ ここまで ---------------------------------------------------

---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・

  # ご質問にはできる限りお答えしています。
    ただし、お名前(本名)を書いていただいた場合に限らせていただきます。


ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・

コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 「設定 一直線」の出番は少な... | トップ | 新版登場! ESET(セキュリテ... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

おやぢチップス」カテゴリの最新記事