c# Windows窗体-如何在组合框中获得先前的SelectedItem



我目前正试图找出如何在组合框中获得以前的选定项,数据添加在Form1_Load函数的列表中。

//Flavour Change Button
private void CoboFlav_SelectionChangeCommitted(object sender, EventArgs e)
{
var selectedItemPrice = (coboFlav.SelectedItem as Flavour).price;
var selectedItemName = (coboFlav.SelectedItem as Flavour).name;
var pre_item = pre_selIndex = (coboFlav.SelectedItem as Flavour).price;
//var previousItem = flavourTea_Previous_Var = (coboFlav.SelectedItem as Flavour).price;
//Item List
Flavour listItem1 = ListCopy.MyList2.Find(x => (x.name == "- None -"));
Flavour listItem2 = ListCopy.MyList2.Find(x => (x.name == "Lemon"));
Flavour listItem3 = ListCopy.MyList2.Find(x => (x.name == "Passionfruit"));
Flavour listItem4 = ListCopy.MyList2.Find(x => (x.name == "Yogurt"));
//Checking Base Tea Box for adding price to currentItemTotal
if (coboFlav.Text == listItem1.name || coboFlav.Text == listItem2.name || coboFlav.Text == listItem3.name || coboFlav.Text == listItem4.name)
{
//Increment Item Cost Value & take away previous item cost 
currentTotalItemCost += selectedItemPrice - pre_item;
}

//Update CUrrentTotal Text
CurrentTotal.Text = currentTotalItemCost.ToString();
}

如果用户在组合框中选择了一个选项,则selectedPrice int增加。我试图拿走的previousItemCost和我有困难理解如何找到以前选择的用户输入。

我真的不知道如何处理这个问题,我看到其他几个人声明一个新的int为-1,并将SelectedIndex设置为-1。但我真的不明白这个解决方案。如果有人能给我指个方向就太好了。另外,我对windows窗体很陌生,因为我来自Unity背景。

感谢

显然你想要一个特殊的组合框。在你的"面向对象编程"中如果你想要一个类似于另一个类的类,但有一些特殊的行为,你应该创建一个派生类:

class PreviousSelectedComboBox : ComboBox         // TODO: invent proper name
{
private int previousSelectedIndex = -1;
[System.ComponentModel.Browsable(false)]
public virtual int PreviousSelectedIndex {get; private set;}
{
get => this.previousSelectedIndex;
set => this.previousSelectedIndex = value;
}
[System.ComponentModel.Browsable(false)]
public override int SelectedIndex
{
get => base.SelectedIndex;
set
{
if (this.SelectedIndex != value)
{
this.PreviousSelectedIndex = this.SelectedIndex;
base.SelectedIndex = value;
// TODO: call OnSelectedIndexChanged?
}
}
}
}

在虚拟测试程序或单元测试中,检查ComboBox是否。OnSelectedIndexChanged由base.SelectedIndex调用,如果没有,则在SelectedIndex.Set中调用。还检查如果调用ComboBox.SelectedItem.Set会发生什么。这是否通过调用覆盖的属性SelectedIndex来更改所选索引?

我不认为你需要一个事件PreviousSelectedIndexChanged。它不会添加任何东西,因为当事件SelectedIndexChanged被引发时,这个事件就会被引发,所以那些想要在PreviousSelectedIndex发生变化时得到通知的人,可以订阅事件SelectedIndexChanged。

但是,如果您想要这样的事件,请遵循property SelectedIndex和OnSelectedIndexChanged中使用的模式。

最新更新