C#を攻略しよう

c#

オーナードロー5

オーナードローとは、自分でコントロールを描画する機能のことです。オーナードローを利用して、リストボックスの2行目の文字列の大きさを変更するサンプルプログラムを紹介します。

文字色変更  /  フォント変更  /  文字背景色

文字列の一部の文字色変更  /  文字の大きさ

文字の大きさ


[TOP]


1.「ファイル」→「新しいプロジェクト」→「WINDOWSアプリケーション」を選択。

2.ツールボックスから「ListBox」を配置する。

3.「DrawMode」プロバティの値を、「OwnerDrawVariable」に変更する。

4.「listBox1」のイベントから「DrawItem」を探してダブルクリックする。

5.「listBox1」のイベントから「MeasureItem」を探してダブルクリックする。

6.次のコード(黒文字部分)を入力する。

public partial class Form1 : Form
{

    Font cfont = new Font("MS P明朝", 20, FontStyle.Bold);
    public Form1()
    {
        InitializeComponent();
        //リストボックスにアイテムを追加する。
        listBox1.Items.Add("りんご");
        listBox1.Items.Add("バナナ");
        listBox1.Items.Add("メロン");
    }

    private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    {

        //適切な色で背景を描画する。
        e.DrawBackground();
        string txt = ((ListBox)sender).Items[e.Index].ToString();
        Point rec = new Point(e.Bounds.X, e.Bounds.Y);
        Graphics g = e.Graphics;
        Font deffont = e.Font;
        //2行目の文字列のフォントを「サイズ20pt、MS P明朝、太字」に変更する。
        if (e.Index == 1)
        {
            deffont=cfont;
        }
        //文字列を描画する。
        TextRenderer.DrawText(g, txt, deffont, rec, Color.Black, TextFormatFlags.Default);
        //フォーカスを示す四角形を描画
        e.DrawFocusRectangle();
    }

    //DrawItemイベントの前に発生するイベント
    private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
    {

        //2行目の領域の高さを「サイズ20pt、MS P明朝、太字」に変更する。
        if (e.Index == 1)
        {
            e.ItemHeight = (int)cfont.GetHeight();
        }
    }
}

7.「デバッグ」→「デバッグ開始」または、F5キーを押すと、デバッグとともにプログラムが実行されます。

 

 

※当サイトは、リンクフリーです。