0

ListBoxから継承するクラスを作成し、それにプロパティ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()で試してみましたが、うまくいきませんでした。

4

1 に答える 1

4

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に変更する場合は、ListBoxの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]);
    }
}
于 2012-06-23T20:03:41.230 に答える