7

我有一个组合框(winform)。此组合框有一些项目(例如 1、2、3、4)。

现在,当我更改此组合中的选择时,我想知道旧索引新索引

我怎么得到这个?

我希望避免的可能方法。

  1. 添加一个输入事件,缓存当前索引,然后在选择索引更改时获取新索引。

  2. 使用事件发送者收到的选定文本/选定项属性。

我理想中想要的:

  1. 在收到的事件参数中,我想要类似的东西:

    e.旧索引;e.新索引;

    现在,在SelectionIndex Change 事件中收到的事件参数完全没用。

  2. 我不想使用多个事件。

  3. 如果 C# 不提供此功能,我可以让我的事件将旧索引和新索引作为事件参数传递吗?

4

5 回答 5

6

似乎这是一个可能的重复

ComboBox SelectedIndexChanged 事件:如何获取之前选择的索引?

没有内置任何内容,您需要监听此事件并在类变量中跟踪。

但是这个答案似乎暗示了一种扩展组合框以跟踪先前索引 https://stackoverflow.com/a/425323/81053的明智方法

于 2012-08-23T08:18:39.077 回答
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];
        }
    }
于 2018-01-04T08:41:10.963 回答
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财产。

于 2018-03-06T10:10:24.077 回答
0

您可以使用 YourComboBox.Tag (或其他未使用的字符串/int 属性)来存储旧的选定索引...

于 2020-01-29T15:55:02.733 回答
0

我用这样的一对

comboBox.SelectedItem 新项目

comboBox.SelectionBoxItem 旧项目

于 2021-03-09T11:23:17.447 回答