这个几乎是来自这里的啊:
http://blog.csdn.net/ccy3253/archive/2008/01/26/2067304.aspx
在winform编程中,combox是我们经常用到的控件,往往因为界面排版或者其它原因,comboBox的宽度受到限制,而下拉列表中的内容太长。如果按照combobox的默认设置 ,下拉列表和comboBox的宽度一样,并不会跟随内容的变化而变化,这就造成下拉列表中有些项的内容太长而不能全部显示出来.
如果能够让下拉列表的宽度随着内容的变化而变化,这个问题不就解决了。下面我们看看如何让comboxBox的下拉列表宽度自适应内容的宽度,方法AdjustComboBoxDropDownListWidth()用来调整comboBox宽度,但是如果每次在我们向comboBox中添加一项后,就要调用一下这个方法,那就太麻烦了。能不能把这种自适应宽度的功能集成到comboBox中呢?可以,这里我们继承ComboBox,实现一个自定义的控件,在用户每次打开下拉列表的时候,让控件自动调整下拉列表的宽度。
0.控件类
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class CtrlComboBox :ComboBox
{
protected override void OnDropDown(EventArgs e)
{
base.OnDropDown(e);
AdjustComboBoxDropDownListWidth(); //调整comboBox的下拉列表的大小
}
private void AdjustComboBoxDropDownListWidth()
{
Graphics g = null;
Font font = null;
try
{
int width = this.Width;
g = this.CreateGraphics();
font = this.Font;
//checks if a scrollbar will be displayed.
//If yes, then get its width to adjust the size of the drop down list.
int vertScrollBarWidth =
(this.Items.Count > this.MaxDropDownItems)
? SystemInformation.VerticalScrollBarWidth : 0;
int newWidth;
foreach (object s in this.Items) //Loop through list items and check size of each items.
{
if (s != null)
{
//newWidth = (int)g.MeasureString(s.ToString().Trim(), font).Width
newWidth = (int)g.MeasureString(((ComboBoxData)s).StrText, font).Width
+ vertScrollBarWidth;
if (width < newWidth)
width = newWidth; //set the width of the drop down list to the width of the largest item.
}
}
this.DropDownWidth = width;
}
catch
{ }
finally
{
if (g != null)
g.Dispose();
}
}
}
}
1.数据源类
public class ComboBoxData
{
private string _StrValue;
private string _StrText;
public ComboBoxData(string StrValue, String StrText)
{
_StrText = StrText;
_StrValue = StrValue;
}
public string StrValue
{
get
{
return _StrValue;
}
set
{
_StrValue = value;
}
}
public string StrText
{
get
{
return _StrText;
}
set
{
_StrText = value;
}
}
}
2.form 里使用它。
ArrayList al = new ArrayList();
for (int i = 0; i < 9; i++)
{
al.Add( new ComboBoxData("aaaaaaaaaaaaaaaaaaa" + i.ToString(), "aaaaaaaaaaaaaaaaaaa" + i.ToString()));
}
al.Add(new ComboBoxData("只要在我们向combox添加完所有项后,调用一下,就可以调整comboBox下拉列表的宽度了", "只要在我们向combox添
加完所有项后,调用一下,就可以调整comboBox下拉列表的宽度了"));
ctrlComboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
ctrlComboBox1.DisplayMember = "StrText";
ctrlComboBox1.ValueMember = "StrValue";
ctrlComboBox1.DataSource = al;
如果想实现在选择了某项后,combobox以提示的方式来查看选择项的完全text,那要加一个toolTip
private void comboBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.toolTip1.SetToolTip(this.comboBox1, this.comboBox1.Text);
}
分享到:
相关推荐
继承自C# Winform中ComboBox的下拉多选控件,操作简单,效果非常好 1、多选。 2、可绑定List,DataTable,Dictionary类型的数据源。 3、在下拉列表中可显示自定义的多列数据。 4、可在下拉列表中通过输入关键字,...
自己封装的继承自C# Winform中ComboBox的下拉多选控件,操作简单,效果非常好。①,可设置允许单选或多选。②,可绑定List,DataTable,Dictionary,string>类型的数据源。③,在下拉列表中可显示自定义的多列数据。...
C#WinForm的ComboBox控件自定义实现自动模糊匹配查找数据的方法 与控件自带的AutoCompleteMode类似,完美实现模糊匹配,解决AutoCompleteMode只能从左向右匹配的问题
VS2008编写的Combobox控件下拉列表中某些项不可选呈现灰色背景,可以选择的项正常背景
在DataGridView控件中加入ComboBox下拉列表框的实现
C#中怎么实现在combobox显示图标 vs2008工程做的 TestComBoxEX工程是测试工程 ComboBox With Images是类库
在WinForm界面上,采用自定义ComboBox控件实现在下拉框中显示颜色列表。本程序在VS2008下编译通过。
本方法和用checkbox, listbox等控件和事件拼凑出来的不同,本方法是一个集成的独立控件,基本实现了控件的顺滑度,下拉框可悬浮等效果,可以认为是comboBox的升级版,使用方便,仅需引用编译好的DLL,直接在toolBox...
DataGridView控件中加入ComboBox下拉列表框
一款非常实用的C# 的combobox的第三方控件,可以实现下拉后在下拉框中添加图片的功能,忘对有此功能需求的朋友所有帮助。
改变combobox的下拉高度
在DataGridView控件中加入ComboBox下拉列表框的实现案例
首先在窗体中添加一个comboBox1和一个imageList(本例中带有三个图片) this.comboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
非常值得收藏,下载的源码资源: 1. 代码源自网络,并添加部分示例代码; 2. 自定义Combobx下拉框,支持基础控件下拉,也支持自定义控件下拉,扩展十分方便;
combobox下拉时间选择控件,附源码
一款非常实用的C#的combobox的第三方控件,可以实现,下拉后的列表中可以对列表进行勾选多条数据,能实现一些特殊的操作,希望对大家有用
Custom Controls C# WinForm 自定义ComboBox 显示颜色下拉框,在WinForm界面设计方面,采用自定义的ComboBox控件实现下拉框可选择颜色列表。可显示颜色小方块,源代码可在VS2008下编译通过。
一款非常实用的combobox的第三方控件,可以实现让其combobox下拉出TreeView,且可以对TreeView进行相关的选择,且只能选择树形数据中的最底层数据,选择后的数据的所有父节点也都相应的递归显示出来。非常实用,忘对...
现有的combobox只有单选功能,通过重画combobox构造多选combobox;
下拉控件(类似ComboBox)中显示树控件。