我有一个组合框(winform)。这个组合框有一些项目(例如1,2,3,4)。
现在,当我更改此组合中的选择时,我希望知道旧索引和新索引。
我如何得到这个?
我希望避免的可能方法。
添加输入事件,缓存当前索引,然后选择索引更改获取新索引。
使用事件发件人收到的所选文本/所选项目属性。
我理想的想法:
在收到的args事件中,我想要的是:
e.OldIndex; e.newIndex;
现在 SelectionIndex Change事件中收到的事件参数完全没用。
我不想使用多个活动。
如果C#不提供此功能,我可以将我的事件传递给旧索引和新索引作为事件参数吗?
答案 0 :(得分:6)
似乎这可能是重复的
ComboBox SelectedIndexChanged event: how to get the previously selected index?
内置任何内容,您需要监听此事件并跟踪类变量。
但是这个答案似乎提出了一种合理的方法来扩展组合框以跟踪先前的指数 https://stackoverflow.com/a/425323/81053
答案 1 :(得分:0)
1 - 制作整数列表
2 - 将按钮绑定到前一个屏幕(按钮名称" prevB")
3 - 按照代码
//initilize List and put current selected index in it
List<int> previousScreen = new List<int>();
previousScreen.Add(RegionComboBox.SelectedIndex);
//Button Event
private void prevB_Click(object sender, EventArgs e)
{
if (previousScreen.Count >= 2)
{
RegionComboBox.SelectedIndex = previousScreen[previousScreen.Count - 2];
}
}
答案 2 :(得分:0)
您需要使用以下控件替换ComboBox:
public class AdvancedComboBox : ComboBox
{
private int myPreviouslySelectedIndex = -1;
private int myLocalSelectedIndex = -1;
public int PreviouslySelectedIndex { get { return myPreviouslySelectedIndex; } }
protected override void OnSelectedIndexChanged(EventArgs e)
{
myPreviouslySelectedIndex = myLocalSelectedIndex;
myLocalSelectedIndex = SelectedIndex;
base.OnSelectedIndexChanged(e);
}
}
现在您可以获得PreviouslySelectedIndex
属性。
答案 3 :(得分:0)
您可以使用YourComboBox.Tag(或其他未使用的string / int属性)来存储旧的选定索引...
答案 4 :(得分:0)
我使用这样的一对
comboBox.SelectedItem 新项目
comboBox.SelectionBoxItem 旧项目