dotNet 环境中ComboBox下拉框自动适应宽度函数

来源:互联网 发布:上帝之眼网络ip摄像头 编辑:程序博客网 时间:2024/04/29 15:35
最近在调用ComboBox的时候,将ComboBox设置为DropDownList,当下面的文字内容过长的时候经常不能显示完整,非常难看,写了一个函数来自动修改DorpDownWidth属性,来适应文字宽度。

C#实现代码:

         #region AutoSizeComboBoxItem         /// <summary>         /// 自动改变CombBox控件下拉框的宽度,         /// ComboBox控件的DropDown事件中调用本方法。         /// </summary>         /// <param name="sender"> ComboBox对象</param>         public void AutoSizeComboBoxItem(object sender)         {             if (sender is ComboBox)            {                Graphics grap = Graphics.FromHwnd((sender as ComboBox).Handle);                StringFormat sf = new StringFormat(StringFormat.GenericTypographic);                SizeF size;                int i = 0;                int extraWidth = 4;//额外宽度                if ((sender as ComboBox).MaxDropDownItems < (sender as ComboBox).Items.Count)                {                    //可以采用下面三行代码自动获取系统设置的垂直滚动条宽度,单个人觉得过犹不及。 comment by Dominic                    //VScrollBar vScrollBar = new VScrollBar();                    //extraWidth += vScrollBar.Width; //取系统垂直滚动条宽度。                    //vScrollBar.Dispose();                    extraWidth += 18; //预留18px的滚动条条宽度。                }                while (i < (sender as ComboBox).Items.Count)                {                    size = grap.MeasureString((sender as ComboBox).Items[i].ToString(), (sender as ComboBox).Font, 500, sf);                    if (size.Width > (sender as ComboBox).DropDownWidth - extraWidth)                    {                        (sender as ComboBox).DropDownWidth = System.Convert.ToInt32(size.Width) + extraWidth;                    }                    i++;                }                grap.Dispose();                sf.Dispose();            }               }        #endregion //AutoSizeComboBoxItem    }

在ComboBox的DropDown事件中调用这个函数就可以了。

我将它写入到一个UIhelper类中,调用。