如何重载ComboBox 使其下拉按钮(带下箭头的)和下拉列表的垂直滚动条的宽度改变?
解决方案 »
- 数据库有一个表,窗体上有2个数据库有一个表,窗体上有2个DataGridView控件都绑定在这个表上。。控件都绑定在这个表上。。
- 求助Access数据库用OleDbCommandBuilder更新的问题
- 有没有人来说说Pet Shop 4.0的个人心得
- 跪求:vs2008 datagridview 如何添加下拉模板列
- datagridview 隐藏行
- (保证结贴给分)面临痛苦选择:用 c# 还是 delphi 开发桌面应用程序?
- Excel切换窗口(C#)
- 求c#班的3DES Base64()算法
- 高分求:combobox控件多列显示,并且要有列头!怎么做呀!####分不够再加!!!!!
- 如何将在contextmenu的menuitem里面画图啊??(在线等待!!)
- 求一个只能7位数字的正册表达式
- 程序莫名其妙退出问题
是自定义控件吗?
详细的实例我将放在我的博客http://blog.csdn.net/SCSDN上。
public partial class ComboBoxDIY : UserControl
{
public bool buttondown = false;
public ComboBoxDIY()
{
InitializeComponent();
this.listBox1.Visible = false;
this.vScrollBar1.Visible = false;
} private void button1_Click(object sender, EventArgs e)
{
//下拉按钮未曾按下
if (this.buttondown==false)
{
//listbox所有数据的项数
int count = this.listBox1.Items.Count;
//获取listbox所能显示的项数
int displaycount = this.listBox1.Height / this.listBox1.ItemHeight;
//滚动条显示的最大值
int scrollmax = 0;
//垂直方向上显示内容数目大于所能显示的数目时
//垂直滚动条直接可见
if (count > displaycount)
{
scrollmax = count - 1;
this.vScrollBar1.Visible = true;
}
this.vScrollBar1.LargeChange = displaycount;
this.vScrollBar1.Maximum = scrollmax;
this.vScrollBar1.Minimum = 0;
this.vScrollBar1.Scroll += new ScrollEventHandler(vscroll);
this.listBox1.Visible = true;
//下拉按钮按下
this.buttondown = true;
}
//下拉按钮已按下
else
{
if(this.vScrollBar1.Visible)this.vScrollBar1.Visible = false;
this.listBox1.Visible = false;
//下拉按钮弹起
this.buttondown = false;
}
} private void vscroll(object sender, ScrollEventArgs e)
{
//ScrollBar控制listBox滚动
this.listBox1.TopIndex=e.NewValue;
} private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//文本框显示选择结果
this.textBox1.Text =this.listBox1.Items[this.listBox1.SelectedIndex].ToString();
this.vScrollBar1.Visible = false;
this.listBox1.Visible = false;
//下拉按钮弹起
this.buttondown = false;
}
}