如何让组合框的宽度自动适应

在Windows Forms应用程序开发过程中,我们经常会用到组合框(ComboBox),但它的那个下拉列表宽度是固定的,那么如何让它支持自动适应的宽度呢。下面是一个小例子

using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.IO;

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

            Load += new EventHandler(Form1_Load);
        }

        void Form1_Load(object sender, EventArgs e)
        {

            var dir = new DirectoryInfo("e:\\temp");
            var query = from f in dir.GetFiles()
                        select new
                        {
                            FullName = f.FullName,
                            Name = f.Name
                        };

            comboBox1.DataSource = query.ToArray();
            comboBox1.DisplayMember = "Name";
            comboBox1.ValueMember = "FullName";


            
            using (Graphics g = comboBox1.CreateGraphics())
            {
                int widestWidth = comboBox1.DropDownWidth;
                foreach (var item in query.Select(v=>v.Name))
                {
                    int current = (int)g.MeasureString(item, comboBox1.Font).Width;
                    if (current > widestWidth) widestWidth = current;
                }
                comboBox1.DropDownWidth = widestWidth;
            }

        }

    }
}
posted @ 2010-05-19 21:42  陈希章  阅读(1162)  评论(3编辑  收藏  举报