您的位置:首页 > 编程语言 > C#

C#中ListBox控件设置Item字体并居中显示

2014-11-27 11:08 537 查看
最近项目中又需要客制化一些控件,draw来draw去真的好烦,其中有ListBox客制化并居中显示字体,特记录下供各位以备不时,比较简单,禁止拍砖哈~~~

首先将Listbox的DrawMode属性设置为DrawMode.OwnerDrawVariable

加载事件DrawItem和MeasureItem,如不加入MeasureItem事件,则Item会使用默认高度重绘,字体显示不完全,各位可以自己尝试一下

ListBox _listBox = new ListBox();

_listBox.DrawMode = DrawMode.OwnerDrawVariable;

_listBox.DrawItem += _listBox_DrawItem;

_listBox.MeasureItem += _listBox_MeasureItem;

// set listbox item height

        void _listBox_MeasureItem(object sender, MeasureItemEventArgs e)

        {

            e.ItemHeight = 30;

        }

        // make the item text center aligned 

        void _listBox_DrawItem(object sender, DrawItemEventArgs e)

        {

            e.DrawBackground();

            e.DrawFocusRectangle();

            System.Drawing.StringFormat strFmt = new System.Drawing.StringFormat(System.Drawing.StringFormatFlags.NoClip);

            strFmt.Alignment = System.Drawing.StringAlignment.Center;

            RectangleF rf = new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);

            //You can also use DrawImage to add some customized image before or after text string, of course backgroud image

            e.Graphics.DrawString(this.Items[e.Index].ToString(), e.Font, new System.Drawing.SolidBrush(e.ForeColor), rf, strFmt);

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息