C# ListBox控制每行显示不同的内容

已Form为例:向ListBox添加字体的名字

    public partial class Form1 : Form
    {
        ///


        /// 要绘制的文本的字体大小
        ///

        const float FONT_SIZE = 16f;
        public Form1()
        {
            InitializeComponent();

            this.Load += (s, e) =>
            {
                // 向ListBox添加字体的名字
                foreach (FontFamily family in FontFamily.Families)
                {
                    listBox1.Items.Add(family.Name);
                }
            };
        }

        private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
        {
            // 取出项中的文本
            string itemText = (sender as ListBox).Items[e.Index] as string;
            // 创建相应的字体
            using (Font font = new Font(itemText, e.ItemHeight * 1.0F /*FONT_SIZE*/))
            {
                // 计算出要绘制的文本的大小(宽度与高度)
                SizeF size = e.Graphics.MeasureString(itemText, font);
                // 设置项的高度
                e.ItemHeight = Convert.ToInt32(size.Height);
            }
        }

        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            // 取出与当前项相关的文本
            string itemText = (sender as ListBox).Items[e.Index] as string;
            // 创建用于绘制文本的字体对象
            using (Font font = new Font(itemText, e.Font.Height * 1.0F /*FONT_SIZE*/))
            {
                // 创建用于设置文本格式的对象
                StringFormat sf = new StringFormat();
                // 文本在水平方向上左对齐
                sf.Alignment = StringAlignment.Near;
                // 文本在垂直方向上居中对齐
                sf.LineAlignment = StringAlignment.Center;
                // 绘制默认背景
                e.DrawBackground();
                // 绘制文本
                // 以下两种方法都可以检测标记位
                //if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
                if(e.State.HasFlag(DrawItemState.Selected))
                {
                    // 当前项被选中
                    e.Graphics.DrawString(itemText, font, SystemBrushes.HighlightText, e.Bounds, sf);
                }
                else
                {
                    // 当前项未选中
                    e.Graphics.DrawString(itemText, font, SystemBrushes.ControlText, e.Bounds, sf);
                }
                // 释放资源
                sf.Dispose();
            }
        }
    }
 

你可能感兴趣的:(c#,开发语言)