这个几乎是来自这里的啊:
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、可在下拉列表中通过输入关键字,...
有时,根据列表项文本长度的不同,我们可能需要动态地调整`ComboBox`下拉列表的宽度,以确保所有列表项都能完全展示而不会被截断。本文将详细介绍如何实现`ComboBox`下拉部分的自动调整宽度功能。 #### 实现原理 ...
在“Combobox控件某些项不能选的例子”这个问题中,我们关注的是在Visual Studio 2008环境下创建的Combobox,其中部分选项显示为灰色,用户无法进行选择。这种现象通常是因为这些项被设置为了禁用状态或者不可见,...
综上所述,这个项目为C#开发者提供了一个自定义的ComboBox控件,可以方便地在下拉菜单中显示和选择颜色。这不仅增强了界面的直观性,也为其他类似需求的开发提供了参考。通过深入学习和实践,我们可以进一步理解.NET...
在C# WinForm开发中,Combobox控件是常用的数据展示和选择组件,尤其是在需要用户从大量数据中选择一项时。然而,对于大型数据集,简单的下拉列表可能不足以提供良好的用户体验。这时,模糊查询功能就能派上用场,...
C# DataGridView 中 ComboBox 下拉更改事件 在 C# 开发中,DataGridView 控件是应用非常广泛的控件之一。然而,在使用 DataGridView 控件时,如何在单元格中添加按钮、下拉菜单,并且添加事件和事件处理则是许多...
C#WinForm的ComboBox控件自定义实现自动模糊匹配查找数据的方法 与控件自带的AutoCompleteMode类似,完美实现模糊匹配,解决AutoCompleteMode只能从左向右匹配的问题
在C#编程中,`comboBox`控件是一个非常常见的组件,用于展示下拉列表供用户选择。这个控件在各种应用程序界面设计中扮演着重要角色,例如设置配置、选择选项等。下面我们将深入探讨`comboBox`控件的使用,包括其基本...
在Windows编程或者Web开发中,ComboBox控件是一个常见的组件,用于提供用户选择一个项或输入新项的功能。在设计用户界面时,有时我们可能需要自定义ComboBox的下拉列表的高度,以适应不同的显示需求。本篇文章将深入...
在.NET Framework的Windows Forms开发中,`DataGridView`控件是一个常用的数据展示工具,而`ComboBox`则用于提供下拉选项供用户选择。将`ComboBox`集成到`DataGridView`的某一列,可以为用户提供更加丰富的交互体验...
这个自定义控件是基于标准的ComboBox控件进行重定义和扩展,提供了许多实用的功能,包括单选/多选、显示多列数据、自动搜索、自定义列宽以及灵活的数据源绑定。 首先,该控件的最大亮点在于它的多选功能。传统的...
ComboBox控件是Windows Forms中一个非常实用的组件,它结合了文本框和下拉列表的功能。用户可以输入文本,也可以从下拉列表中选择一个项。在某些情况下,我们可能需要自定义ComboBox,比如添加额外的功能、改变其...
在开发用户界面时,经常需要使用ComboBox控件来提供下拉选择项。然而,标准的ComboBox控件默认只支持文本显示,不直接支持图标。为了在ComboBox中同时显示图标和文本,我们需要自定义控件或使用第三方库。下面我们将...
在C#编程中,Combobox控件是一种常用的用户界面元素,用于展示可选择的文本项。然而,有时候我们可能需要增强其功能,使其不仅能够显示文本,还能够显示相关的图片,以提供更丰富的视觉信息。这个"Combobox下拉列表...
一款非常实用的C# 的combobox的第三方控件,可以实现下拉后在下拉框中添加图片的功能,忘对有此功能需求的朋友所有帮助。
在C#编程中,ComboBox控件是一个非常常用的组件,它结合了下拉列表和文本框的功能,用户可以在输入框中直接输入或者从下拉列表中选择一个选项。本篇文章将详细探讨C# ComboBox控件的基本用法、属性、方法、事件以及...
本话题聚焦于如何在ComboBox中实现显示图片,并且让下拉框的宽度根据字符串长度动态伸缩,以提供更友好的用户体验。 首先,我们需要理解ComboBox的基本结构和功能。ComboBox通常由两部分组成:一个文本输入框和一个...
在本文中,我们将深入探讨如何将Silverlight的树形下拉控件转化为WPF(Windows Presentation Foundation)环境下的使用,并以此创建一个名为“wpf_combobox_tree”的自定义控件。这种控件通常用于增强传统的ComboBox...
在C#编程中,ComboBox控件是常用的UI元素,它结合了文本输入框和下拉列表的功能,用户可以在输入框中直接输入或者从下拉列表中选择一项。然而,标准的ComboBox控件往往只能显示简单的文本或枚举值,有时我们需要在...
在Windows Forms开发中,Combobox控件是一种常用的用户界面元素,它允许用户在文本输入框中选择一个预定义的选项或者手动输入。然而,标准的ComboBox控件并不直接支持时间选择的功能。为了实现"combobox下拉时间选择...