关于C#中combobox的使用

请输入图片描述

  1. 如上图所示是一个购买商品的页面,用户在红色区域选择商品的名称和数量,如输入无误(数量不超过库存),点击checkout后计算价格并更新库存。
  2. 现在有一个问题,product对应了五个购买,他们分别从combobox1到combobox5,给每个combobox手动用items.add()添加了同样的商品源。那么,如何避免选择同一种商品,如下图所示(item.remove()可以实现,但会删除此项,因为我是用index做的匹配更新商品库存,index与商品的对应会出现混乱,所以这个方法行不通):
    请输入图片描述
    谢谢各位!!!祝你们好人一生平安。
阅读 7.5k
2 个回答

虽然不是特别看明白你的问题,不过要把combobox删除项,又不怕索引混乱,可以用List<>.

可以增加个属性来判断对应的Item是否可以“选”,如果不能把颜色改变成灰色,再选择的时候不做进一步处理。

首先定义一个类来封装Item的数据

    private class ComboBoxItem
    {
        public int Value { get; set; }
        public string Text { get; set; }
        public bool Selectable { get; set; }
    }

然后在SelectedIndexChanged中对选择的Item进行判断, 如果Selectable为false的话,则设置selectedIndex为-1

this.comboBox1.SelectedIndexChanged += (sender, e) => {
            var cb = sender as ComboBox;

            if (cb.SelectedItem != null 
                && cb.SelectedItem is ComboBoxItem 
                && ((ComboBoxItem) cb.SelectedItem).Selectable == false) {
                cb.SelectedIndex = -1;
            }
        };

重写OnDrawItem,来更改不可选Item的颜色等属性

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{        
    var cb=sender as ComboBox;
    var item=cb.SelectedItem as ComboBoxItem;
    if (!item.Selectable)
    {
        // 处理不能选的Item的颜色
        e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(),
             myFont, Brushes.LightGray, e.Bounds);
    }
    else
    {
        // 正常的
        e.DrawBackground();
        e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(),
             myFont, Brushes.Black, e.Bounds);
        e.DrawFocusRectangle();
    }
} 

也可以自己写一个自定义的MyComboBox,继承自ComboBox,然后做出些扩展。


ps:不在win机器上,不知道写的对不对 - -

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进