C#Windows窗体-如何在组合框中获取上一个SelectedItem
我目前正试图找出如何在组合框中获取上一个选定项,数据将添加到Form1_Load函数的列表中C#Windows窗体-如何在组合框中获取上一个SelectedItem,c#,winforms,C#,Winforms,我目前正试图找出如何在组合框中获取上一个选定项,数据将添加到Form1_Load函数的列表中 //Flavour Change Button private void CoboFlav_SelectionChangeCommitted(object sender, EventArgs e) { var selectedItemPrice = (coboFlav.SelectedItem as Flavour).price; var select
//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?
}
}
}
}
Test在虚拟测试程序或单元测试中,检查是否由base.SelectedIndex
调用,如果不是,则在SelectedIndex.Set
中调用它。
还要检查调用组合框.SelectedItem.Set
时会发生什么情况。这是否会通过调用覆盖的属性SelectedIndex来更改所选索引
事件:我认为您不需要更改先前选择的事件索引。它不会添加任何内容,因为每当引发event SelectedIndexChanged时都会引发此事件,因此那些希望在先前SelectedIndexChanged发生更改时得到通知的人可以向event SelectedIndexChanged进行子贿赂
不过,如果您想要此类事件,请遵循property SelectedIndex和OnSelectedIndex Changed中使用的模式。就组合框而言,没有以前选择的项目。您需要自己跟踪列表中所选的内容。正如@KenWhite所说,最简单的方法是每次当前所选项目更改时跟踪上一个项目,方法是使用
previousSelection
变量跟踪它。如果你需要一个历史记录,那么一个列表就可以了;如果这是您经常需要的功能,那么您可以从组合框
派生您自己的自定义控件,它将跟踪以前的选择并将此数据作为属性公开。您应该创建一个单独的列表
,以添加/删除不同的项。那么总数和计数就很容易了。比如CurrentTotal.Text=selList.Sum(x=>x.price.ToString()代码>。