![](https://blogimg.goo.ne.jp/user_image/46/49/659e58937f438bb87ed48780f28f3521.png)
コンボボックス(ドロップダウン リスト)のお話。
★★ Visual Studio、VB.NET での画面・コードです ★★
Windows Forms でのコンボボックスでは項目の表示(配置)が左詰めになります。
見た目はこんな感じです・・・
![](https://blogimg.goo.ne.jp/user_image/6c/0e/43bccc53a04ef84790c3561d25ef2b5d.png)
これを右詰めや中央寄せ(センタリング)にしたいことがあります。
HorizontalContentAlignment で右詰めにしたいのですが、
残念ながら Windows Forms のコンボボックスにはそのプロパティがありません。
なのでコードで項目の配置を変更します。
オーナードローというやつです。
左詰め(これが標準)、センタリング、右詰めをラジオボタンで選択して
項目の表示位置を変えることにしました。
まずは画面をご覧いただきましょう・・・
![](https://blogimg.goo.ne.jp/user_image/76/08/f756a8a26b8fe344eede8aca0f40dedf.gif)
デザイナーでの項目名(コントロールの名前)は次のとおり・・・
![](https://blogimg.goo.ne.jp/user_image/36/13/0c8fe60b55b72b8f14cbc2dd40a9399f.png)
# 自分の練習用フォームそのままを使っています。
分かりやすい名称ではありませんが、ご容赦ください。
このコードは次のとおりです。
・・・ 行の先頭には全角のスペースを入れています。
--- ▼▼ ここから ---------------------------------------------------
' ---⦿ ラジオボタン: 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
--- ▲▲ ここまで ---------------------------------------------------
---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
# ご質問にはできる限りお答えしています。
ただし、お名前(本名)を書いていただいた場合に限らせていただきます。
![](https://blogimg.goo.ne.jp/user_image/74/f8/4c92568b05b542c5adef7ac20a148706.png)
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
★★ Visual Studio、VB.NET での画面・コードです ★★
Windows Forms でのコンボボックスでは項目の表示(配置)が左詰めになります。
見た目はこんな感じです・・・
![](https://blogimg.goo.ne.jp/user_image/6c/0e/43bccc53a04ef84790c3561d25ef2b5d.png)
これを右詰めや中央寄せ(センタリング)にしたいことがあります。
HorizontalContentAlignment で右詰めにしたいのですが、
残念ながら Windows Forms のコンボボックスにはそのプロパティがありません。
なのでコードで項目の配置を変更します。
オーナードローというやつです。
左詰め(これが標準)、センタリング、右詰めをラジオボタンで選択して
項目の表示位置を変えることにしました。
まずは画面をご覧いただきましょう・・・
![](https://blogimg.goo.ne.jp/user_image/76/08/f756a8a26b8fe344eede8aca0f40dedf.gif)
デザイナーでの項目名(コントロールの名前)は次のとおり・・・
![](https://blogimg.goo.ne.jp/user_image/36/13/0c8fe60b55b72b8f14cbc2dd40a9399f.png)
# 自分の練習用フォームそのままを使っています。
分かりやすい名称ではありませんが、ご容赦ください。
このコードは次のとおりです。
・・・ 行の先頭には全角のスペースを入れています。
--- ▼▼ ここから ---------------------------------------------------
' ---⦿ ラジオボタン: 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
--- ▲▲ ここまで ---------------------------------------------------
---------------------------------------------------------
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
# ご質問にはできる限りお答えしています。
ただし、お名前(本名)を書いていただいた場合に限らせていただきます。
![](https://blogimg.goo.ne.jp/user_image/74/f8/4c92568b05b542c5adef7ac20a148706.png)
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・