关于C#中combobox的使用
- 如上图所示是一个购买商品的页面,用户在红色区域选择商品的名称和数量,如输入无误(数量不超过库存),点击checkout后计算价格并更新库存。
- 现在有一个问题,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