すらすらプログラマーへのお問い合わせ
すらすらのブログ
アクセス数  累計:000,125,020  昨日:000,000,099  本日:000,000,042
Loading
リストボックス
.NET プログラミング
プロパティグリッド
印刷
リストボックス
スレッド
リストビュー
インストーラー
やってみよう!

できるVisual Studio 2015 Windows /Android/iOS アプリ対応

独習C# 第3版

VisualBasic2013パーフェクトマスター (Perfect Master SERIES)

プログラミング.NET Framework 第4版 (Microsoft Press)

VisualBasic2013逆引き大全555の極意

猫でもわかるWindowsプログラミング 第4版 (猫でもわかるプログラミング)

VisualC#2013逆引き大全555の極意

オーナー描画 最終更新:2010/07/22
【Amazon ランキング:本 - ビジネス・経済】

リストボックスにかかわらず、多くのコントロールはオーナー描画をサポートしています。
ここではオーナー描画のイベント DrawItem をハンドルしてアイテム毎にラインを引いてみます。
このオーナー描画を応用することによってアイテム毎に文字色や、背景色を変えたり、イメージを描画するなど使い方しだいでいろいろできるようになります。
オーナー描画イベント
オーナー描画を行うにはリストボックスの DrawItem イベントをハンドルします。DrawItem イベントの引数 DrawItemEventArgs には描画に必要な色や描画範囲などの情報が含まれていますのでそれらを使ってアイテムの描画を行います。

[VB]
Private Sub listBox1_DrawItem(ByVal sender As Object , _
    
ByVal e As System.Windows.Forms.DrawItemEventArgs) _
    
Handles listBox1.DrawItem

[C#]
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
フォームの作成
Form1 に ListBox, Label をはりつけます。

ListBox:[listBox1]
DrawMode OwnerDrawFixed
ItemHeight 19

Label:[Label1]
Label:[Label2]

VB[Form1.vb]
Imports System.Text

Public Class Form1

    
Public Sub New()

        
' この呼び出しは、Windows フォーム デザイナで必要です。
        InitializeComponent()

        
' InitializeComponent() 呼び出しの後で初期化を追加します。
        Me.listBox1.DrawMode = DrawMode.OwnerDrawFixed
        
Me.listBox1.ItemHeight = 19

    
End Sub

    Private Sub Form1_Load(ByVal sender As Object, _
                           
ByVal e As System.EventArgs) Handles Me.Load
        
' リストボックスアイテム追加
        For i As Integer = 0 To 99
            
Me.listBox1.Items.Add(String.Format("アイテム{0:00}", i))
        
Next
    End Sub

    Private Sub listBox1_SelectedIndexChanged(ByVal sender As Object, _
                                              
ByVal e As System.EventArgs) _
                                              
Handles listBox1.SelectedIndexChanged

        
' 描画モードと高さの設定
        Me.label2.Text = Me.listBox1.SelectedItem.ToString()
    
End Sub

    Private Sub listBox1_DrawItem(ByVal sender As Object, _
                                  
ByVal e As System.Windows.Forms.DrawItemEventArgs) _
                                  
Handles listBox1.DrawItem

        
' 背景の塗りつぶし
        e.DrawBackground()

        
' テキストの描画
        If (e.Index >= 0) Then
            Dim fb As Brush = New SolidBrush(e.ForeColor)
            
Dim sf As StringFormat = New StringFormat
            sf.Alignment = StringAlignment.Near
            sf.LineAlignment = StringAlignment.Center
            e.Graphics.DrawString(
Me.listBox1.Items(e.Index).ToString(), _
                e.Font, fb, e.Bounds, sf)

        
End If

        ' ラインの描画
        e.Graphics.DrawLine(Pens.DarkGray, _
            e.Bounds.X, _
            e.Bounds.Y + e.Bounds.Height - 1, _
            e.Bounds.X + e.Bounds.Width, _
            e.Bounds.Y + e.Bounds.Height - 1)
    
End Sub

End
 Class
C#[Form1.cs]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ListBox_CS
{
    
public partial class Form1 : Form
    {
        
public Form1()
        {
            InitializeComponent();

            
// 描画モードと高さの設定
            this.listBox1.DrawMode = DrawMode.OwnerDrawFixed;
            
this.listBox1.ItemHeight = 19;
        }

        
private void Form1_Load(object sender, EventArgs e)
        {
            
// リストボックスボックスアイテム追加
            for (int i = 0; i < 100; i++)
                
this.listBox1.Items.Add(string.Format("アイテム{0:000}", i));

        }

        
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
// リストボックスで選択されているアイテムを表示
            this.label2.Text = this.listBox1.SelectedItem.ToString();
        }

        
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            
// 背景の塗りつぶし
            e.DrawBackground();

            
// テキストの描画
            if (e.Index >= 0)
            {
                
Brush fb = new SolidBrush(e.ForeColor);
                
StringFormat sf = new StringFormat();
                sf.Alignment = 
StringAlignment.Near;
                sf.LineAlignment = 
StringAlignment.Center; 
                e.Graphics.DrawString(
this.listBox1.Items[e.Index].ToString(),
                    e.Font, fb, e.Bounds, sf);
            }

            
// ラインの描画
            e.Graphics.DrawLine(Pens.DarkGray,
                e.Bounds.X,
                e.Bounds.Y + e.Bounds.Height -1,
                e.Bounds.X + e.Bounds.Width,
                e.Bounds.Y + e.Bounds.Height -1);
        }
    }
}
※このページで紹介しているサンプルコードについて管理者は動作保障をいたしません※
※サンプルコードを使用する場合は、自己責任でお願いします※

【楽天 ランキング:パソコン・周辺機器 - パソコンソフト】




このサイトはフリーソフトのMerge HTMLで作成されています。
このサイトはリンクフリーです。

ページの先頭に戻る Copyright© 2010-2015 Jun.Shiozaki All rights reserved.