关于C#中combobox的使用

请输入图片描述

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

    请输入图片描述

    谢谢各位!!!祝你们好人一生平安。

回答:

虽然不是特别看明白你的问题,不过要把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机器上,不知道写的对不对 - -

以上是 关于C#中combobox的使用 的全部内容, 来源链接: utcz.com/p/190214.html

回到顶部