C# 在Winform'中获取旧的选定索引;s组合框

C# 在Winform'中获取旧的选定索引;s组合框,c#,winforms,combobox,C#,Winforms,Combobox,我有一个组合框(winform)。此组合框包含一些项(例如1、2、3、4) 现在,当我更改此组合中的选择时,我希望知道旧索引和新索引 我怎么得到这个 我希望避免的可能方法 添加一个输入事件,缓存当前索引,然后在选择索引更改时获取新索引 使用事件发件人接收的选定文本/选定项属性 我理想的需求: 在接收到的事件参数中,我需要如下内容: e、 OldIndex; e、 新指数 现在,在选择索引更改事件中接收到的事件参数是完全无用的 我不想使用多个事件 如果C#不提供此功能,我可以让我的事件作为事件参数

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

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

我怎么得到这个

我希望避免的可能方法

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

  • 使用事件发件人接收的选定文本/选定项属性

  • 我理想的需求:

  • 在接收到的事件参数中,我需要如下内容:

    e、 OldIndex; e、 新指数

    现在,在选择索引更改事件中接收到的事件参数是完全无用的

  • 我不想使用多个事件

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


  • 似乎这是一个可能的复制品

    没有内置内容,您将需要侦听此事件并跟踪类变量

    但这个答案似乎暗示了一种扩展组合框以跟踪上一个索引的明智方法

    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];
            }
        }
    
    //初始化列表并将当前选定的索引放入其中
    List previousScreen=新列表();
    上一屏幕。添加(RegionComboBox.SelectedIndex);
    //按钮事件
    private void prevB_Click(对象发送方,事件参数e)
    {
    如果(previousScreen.Count>=2)
    {
    RegionComboBox.SelectedIndex=previousScreen[previousScreen.Count-2];
    }
    }
    
    您需要用以下控件替换组合框:

    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);
        }
    }
    

    现在,您可以获取以前选择的索引属性。

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

    我使用这样的索引对

    comboBox.SelectedItem新建项目


    comboBox.SelectionBoxItem old item

    Hi Nikhil,您可以使用一个变量,不需要任何事件,如果您同意这个想法,请告诉我将代码作为答案发布。ComboBoxEdit by devexpress具有EditValueChanged事件。如果您不想对索引执行任何操作,只需要文本属性,那么它比标准comboBox更好地控制。请参阅可能的副本,感谢您的贡献!但是请注意,原作者明确希望避免缓存(除非我误解了您的答案)。如果在答案中包含代码片段也很好。