C# winform combox 下拉框选项过长,显示不全,怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# winform combox 下拉框选项过长,显示不全,怎么解决相关的知识,希望对你有一定的参考价值。

rt

combox1.maxdropdown 显示项目数,可以设置这个来显示全部,要是显示不够长就就换吧。追问

下拉的项目 因为太宽 而显示不全。有解决方法么???

追答

combox1.dropdownwidht 设置下拉框宽度

combox1.dropdownwidht 设置下拉框宽度

参考技术A 可以通过查询语句来控制选项的多少.
显示不全又是什么意思??是因为不够宽显示不全吗??追问

下拉的项目 因为太宽 而显示不全。有解决方法么???

追答

是不是下拉项很多,而下拉框无法把所有显示出来??那有没有滚动条啊??

参考技术B 可以设置下拉框的长度和宽度啊 参考技术C 滚动条啊不是有 参考技术D SelectedIndex =0

winform解决datagridview里放combox,combox不能按下键快速选择的问题

效果图:
一开始,是拖个下拉框到窗体上,用dgv.controls.Add(combox)添加到表格里,在通过表格事件,触发时,改变下拉框的位置和大小,这样做,下拉框是会出现在表格里,但是有问题,不能通过键盘的下键进行快速筛选,当表格有多行时,在下拉框列按下键会先打开下拉框的选项列表,不过打开了又立马缩回去了,然后选中的下拉框就跳到一下行的下拉框去了。
 
本来想通过 表格 keydown事件 禁用 上下键,但测试时发现,在下拉框列按下键,还是会跳行,其他列的确不会在跳行了。所以这样做不得行。
 
后来,我想,加个panel panel里在加下拉框,把panel添加到表格里,这样还是不得行。
 
再后来,我想,直接在表格上的下拉框列覆盖一个下拉框,但我发现,如果不用dgv.controls.add()方法添加下拉框,你在设计窗体时,把其他控件拖动到表格控件上,其他控件是会被遮住的,根本显示不了,所以这样做也不得行。
 
最后我想,那就把表格自带的combox列扩展成能输入的下拉框列,最后这样做就行了。扩展表格自带的下拉框列是我找的网上的代码:c#——Winform DatagridView 扩展支持combobox列自定义DropDownStylehttps://blog.csdn.net/Shiyaru1314/article/details/52043688
代码拿过来,改了一点点
combo.DataSource == null 改成了combo.Items != null 删了 combo.DropDownHeight = 1;这句
 
然后是我自己写的代码
  //模糊查询Combobox
        public void selectCombobox(ComboBox cb, List<string> listOnit)
        {
            //输入key之后返回的关键词
            List<string> listNew = new List<string>();
            //清空combobox
            cb.Items.Clear();
            //清空listNew
            listNew.Clear();
            //遍历全部备查数据
            foreach (var item in listOnit)
            {
                if (item.ToLower().Contains(cb.Text.ToLower()))
                {
                    //符合,插入ListNew
                    listNew.Add(item);
                }
            }
            //combobox添加已经查询到的关键字
            cb.Items.AddRange(listNew.ToArray());
            //设置光标位置,否则光标位置始终保持在第一列,造成输入关键词的倒序排列
            cb.SelectionStart = cb.Text.Length;
            //保持鼠标指针原来状态,有时鼠标指针会被下拉框覆盖,所以要进行一次设置
            Cursor = Cursors.Default;
           
        }
做的时候,一定要保持对combox的引用,不然就会出现内存错误的异常,因为combox会释放掉。
private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            var EditingControl = e.Control as ComboBox;


            if (EditingControl != null)
            {
                //用个集合成员保持对combox的引用
                if (ListCbx.Contains(EditingControl))

                { EditingControl = ListCbx.Find(x => x == EditingControl); }
                else
                {
                    EditingControl.Items.Clear();
                    EditingControl.Items.AddRange(new String[] { "Beijing", "Shanghai", "Shanghaiw", "Shangwhai", "Shawnghai", "Sheenghai", "Shangwwhai", "Guangzhou", "Wuhan", "李斌一", "李斌二", "Wuha", "Shenzhen" });
                    ListCbx.Add(EditingControl);
                    EditingControl.TextUpdate += EditingControl_TextChanged;
                    EditingControl.KeyDown += EditingControl_KeyDown;
                }
            }
        }

以上是关于C# winform combox 下拉框选项过长,显示不全,怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

C# combox 设置显示下拉菜单的第一项,如图。还有下拉选项的索引怎么回事,所索引为零是菜单的第一个选项

winform解决datagridview里放combox,combox不能按下键快速选择的问题

c#里面ComBox下拉框里面比较里面是不是有这个值

C# Winform的comboBox控件下拉框怎样做一个多选?请大神指教!麻烦您给出相应代码!

C#使用 ComboBox 控件

c#里面,ComBox下拉框比较里面,是不是有这个值?