C# 将属性添加到继承的ListBox并重写方法以对其进行更改

C# 将属性添加到继承的ListBox并重写方法以对其进行更改,c#,winforms,inheritance,listbox,C#,Winforms,Inheritance,Listbox,我试图创建一个继承自列表框的类,并将属性PreviousSelectedIndex添加到该类中。到目前为止一切都很好 接下来,我将尝试在更改SelectedIndex之前设置该属性 问题是我找不到更改属性SelectedIndex的方法,因此无法捕获它。我总是可以在对象本身上手动更改它,但这只是一种解决方法。以下是我得到的: public class MyListBox : System.Windows.Forms.ListBox { public int PreviousSelecte

我试图创建一个继承自列表框的类,并将属性PreviousSelectedIndex添加到该类中。到目前为止一切都很好

接下来,我将尝试在更改SelectedIndex之前设置该属性

问题是我找不到更改属性SelectedIndex的方法,因此无法捕获它。我总是可以在对象本身上手动更改它,但这只是一种解决方法。以下是我得到的:

public class MyListBox : System.Windows.Forms.ListBox
{
    public int PreviousSelectedIndex { get; set; }

    public MyListBox() : base()
    {
        this.PreviousSelectedIndex = -1;
    }

    protected override void OnClick(EventArgs e)
    {
        this.PreviousSelectedIndex = base.SelectedIndex;
        base.OnClick(e);
    }
}
当我尝试时:

MessageBox.Show(
            "Previous Index = " + listBox4.PreviousSelectedIndex +
            "\nCurrent Index = " + listBox4.SelectedIndex
            );
我总是得到相同的值


我还用OnMouseDown()OnSelectedIndexChanged()进行了尝试,但运气不佳。

对于Winform,您可以执行以下操作:

public class MyListBox : System.Windows.Forms.ListBox
{
    private int _selectedIndex = -1;
    public int PreviousSelectedIndex { get; set; }

    public MyListBox() : base()
    {
        this.PreviousSelectedIndex = -1;
        this.SelectedIndexChanged += OnSelectedIndexChanged;
    }

    private void OnSelectedIndexChanged(object sender, System.EventArgs e)
    {
        PreviousSelectedIndex = _selectedIndex;
        _selectedIndex = this.SelectedIndex;
    }
}
如果要更改为WPF,可以从列表框的SelectedChanged事件中获取上一项

public MyListBox() : base()
{
    this.SelectionChanged += OnSelectionChanged;
    this.PreviousSelectedIndex = -1;
}

private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if(e.RemovedItems.Count == 0)
    {
        this.PreviousSelectedIndex = -1;
    }
    else
    {
        this.PreviousSelectedIndex = this.Items.IndexOf(e.RemovedItems[0]);
    }
}

对于Winform,您可以执行以下操作:

public class MyListBox : System.Windows.Forms.ListBox
{
    private int _selectedIndex = -1;
    public int PreviousSelectedIndex { get; set; }

    public MyListBox() : base()
    {
        this.PreviousSelectedIndex = -1;
        this.SelectedIndexChanged += OnSelectedIndexChanged;
    }

    private void OnSelectedIndexChanged(object sender, System.EventArgs e)
    {
        PreviousSelectedIndex = _selectedIndex;
        _selectedIndex = this.SelectedIndex;
    }
}
如果要更改为WPF,可以从列表框的SelectedChanged事件中获取上一项

public MyListBox() : base()
{
    this.SelectionChanged += OnSelectionChanged;
    this.PreviousSelectedIndex = -1;
}

private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if(e.RemovedItems.Count == 0)
    {
        this.PreviousSelectedIndex = -1;
    }
    else
    {
        this.PreviousSelectedIndex = this.Items.IndexOf(e.RemovedItems[0]);
    }
}

3个错误:错误1:“FinalProject.MyListBox”不包含“SelectionChanged”的定义,并且找不到接受“FinalProject.MyListBox”类型的第一个参数的扩展方法“SelectionChanged”(是否缺少using指令或程序集引用?)错误2:找不到类型或命名空间名称“SelectionChangedEventArgs”(是否缺少using指令或程序集引用?)错误3:“FinalProject.MyListBox”不包含“IndexOf”的定义,并且没有接受类型为“FinalProject.MyListBox”的第一个参数的扩展方法“IndexOf”…在项目的当前阶段无法解决此问题。很抱歉,可能是下一个项目3错误:错误1:“FinalProject.MyListBox”不包含“SelectionChanged”的定义,并且找不到接受类型为“FinalProject.MyListBox”的第一个参数的扩展方法“SelectionChanged”(是否缺少using指令或程序集引用?)错误2:找不到类型或命名空间名称“SelectionChangedEventArgs”(是否缺少using指令或程序集引用?)错误3:“FinalProject.MyListBox”不包含“IndexOf”的定义,并且没有接受类型为“FinalProject.MyListBox”的第一个参数的扩展方法“IndexOf”…在项目的当前阶段无法解决此问题。很抱歉,可能是下一个项目请参见“请参见”