C#を攻略しよう

c#

オーナードロー4

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

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

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

文字色


[TOP]


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

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

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

4.「Form」のイベントから「Load」を選択して、次のコード(黒文字部分)を入力する。

private void Form1_Load(object sender, EventArgs e)
}

    listBox1.Items.Add("りんご");
    listBox1.Items.Add("バナナAAAみかん");
    listBox1.Items.Add("メロン");
}

メソッドの上にマウスポインタをもってくると、ポップアップヒントが表示されます。またF1キーを押すと、ヘルプが立ち上がります。

5.「listBox1」のイベントから「DrawItem」を探してダブルクリックし、次のコード(黒文字部分)を入力する。

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
}

    //適切な色で背景を描画する。
    e.DrawBackground();
    string txt = ((ListBox)sender).Items[e.Index].ToString(),
    txt2 = txt.Replace("AAA", "\nAAA\n");
    Rectangle rec = e.Bounds;
    Graphics g = e.Graphics;
    Color foreColor = Color.Black;//文字色
    foreach (string str in txt2.Split('\n'))
    {
        //文字幅を計算する
        rec.Width = TextRenderer.MeasureText(g, str, e.Font, new Size(int.MaxValue, int.MinValue), TextFormatFlags.NoPadding).Width;
        //文字列中に”AAA”が含まれる場合、その文字色を赤に設定する
        if (str.Equals("AAA"))
        {
            foreColor = Color.Red;
        }
        else
        {
            foreColor = Color.Black;
        }
        //文字列の描画
        TextRenderer.DrawText(g, str, e.Font, rec, foreColor, TextFormatFlags.NoPadding);
        rec.Location = new Point(rec.X + rec.Width, rec.Y);
    }
    //フォーカスを示す四角形を描画
    e.DrawFocusRectangle();
}

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

 

 

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