簡體   English   中英

C# Windows Forms - 如何在 Combobox 中獲取上一個 SelectedItem

[英]C# Windows Forms - How to get previous SelectedItem in Combobox

我目前正在嘗試弄清楚如何在 Combobox 中獲取以前的 Selected Item,數據被添加到 Form1_Load function 的列表中。

  //Flavour Change Button
    private void CoboFlav_SelectionChangeCommitted(object sender, EventArgs e)
    {
        var selectedItemPrice = (coboFlav.SelectedItem as Flavour).price;
        var selectedItemName = (coboFlav.SelectedItem as Flavour).name;

        var pre_item = pre_selIndex = (coboFlav.SelectedItem as Flavour).price;

        //var previousItem = flavourTea_Previous_Var = (coboFlav.SelectedItem as Flavour).price;

        //Item List
        Flavour listItem1 = ListCopy.MyList2.Find(x => (x.name == "- None -"));
        Flavour listItem2 = ListCopy.MyList2.Find(x => (x.name == "Lemon"));
        Flavour listItem3 = ListCopy.MyList2.Find(x => (x.name == "Passionfruit"));
        Flavour listItem4 = ListCopy.MyList2.Find(x => (x.name == "Yogurt"));

        //Checking Base Tea Box for adding price to currentItemTotal
        if (coboFlav.Text == listItem1.name || coboFlav.Text == listItem2.name || coboFlav.Text == listItem3.name || coboFlav.Text == listItem4.name)
        {
            //Increment Item Cost Value & take away previous item cost 
            currentTotalItemCost += selectedItemPrice - pre_item;
        }


        //Update CUrrentTotal Text
        CurrentTotal.Text = currentTotalItemCost.ToString();
    }

如果用戶在 combobox 中選擇了一個選項,則 selectedPrice int 會增加。 我試圖拿走 previousItemCost 並且我無法理解如何找到以前選擇的用戶輸入。

我不太確定如何處理這個問題,我看到其他幾個人將一個新的 int 聲明為 -1 並將 SelectedIndex 設置為該值。 但我真的不明白那個解決方案。 如果有人能指出我正確的方向,那就太棒了。 我對 windows forms 也很陌生,因為我來自 Unity 背景。

謝謝

顯然你想要一種特殊的 ComboBox。在你的“面向對象編程”課程中你了解到,如果你想要一個類似於另一個 class 的 class,但有一些特殊的行為,你應該創建一個派生的 class:

class PreviousSelectedComboBox : ComboBox         // TODO: invent proper name
{
    private int previousSelectedIndex = -1;

    [System.ComponentModel.Browsable(false)]
    public virtual int PreviousSelectedIndex {get; private set;}
    {
        get => this.previousSelectedIndex;
        set => this.previousSelectedIndex = value;
    }

    [System.ComponentModel.Browsable(false)]
    public override int SelectedIndex
    {
        get => base.SelectedIndex;
        set
        {
            if (this.SelectedIndex != value)
            {
                this.PreviousSelectedIndex = this.SelectedIndex;
                base.SelectedIndex = value;

                // TODO: call OnSelectedIndexChanged?
            }
        }
    }
}

測試在虛擬測試程序或單元測試中,檢查ComboBox.OnSelectedIndexChanged是否被base.SelectedIndex調用,如果沒有,則在SelectedIndex.Set中調用它。 還要檢查如果ComboBox.SelectedItem.Set會發生什么。 這是否會通過調用重寫的屬性 SelectedIndex 來更改選定的索引?

事件:我認為您不需要事件 PreviousSelectedIndexChanged。 它不會添加任何內容,因為每當引發事件 SelectedIndexChanged 時都會引發此事件,因此那些希望在 PreviousSelectedIndex 更改時得到通知的人可以訂閱事件 SelectedIndexChanged。

不過,如果您需要此類事件,請遵循屬性 SelectedIndex 和 OnSelectedIndexChanged 中使用的模式。

我目前正在嘗試弄清楚如何在 Combobox 中獲取上一個選定項目,數據被添加到 Form1_Load function 的列表中。

  //Flavour Change Button
    private void CoboFlav_SelectionChangeCommitted(object sender, EventArgs e)
    {
        var selectedItemPrice = (coboFlav.SelectedItem as Flavour).price;
        var selectedItemName = (coboFlav.SelectedItem as Flavour).name;

        var pre_item = pre_selIndex = (coboFlav.SelectedItem as Flavour).price;

        //var previousItem = flavourTea_Previous_Var = (coboFlav.SelectedItem as Flavour).price;

        //Item List
        Flavour listItem1 = ListCopy.MyList2.Find(x => (x.name == "- None -"));
        Flavour listItem2 = ListCopy.MyList2.Find(x => (x.name == "Lemon"));
        Flavour listItem3 = ListCopy.MyList2.Find(x => (x.name == "Passionfruit"));
        Flavour listItem4 = ListCopy.MyList2.Find(x => (x.name == "Yogurt"));

        //Checking Base Tea Box for adding price to currentItemTotal
        if (coboFlav.Text == listItem1.name || coboFlav.Text == listItem2.name || coboFlav.Text == listItem3.name || coboFlav.Text == listItem4.name)
        {
            //Increment Item Cost Value & take away previous item cost 
            currentTotalItemCost += selectedItemPrice - pre_item;
        }


        //Update CUrrentTotal Text
        CurrentTotal.Text = currentTotalItemCost.ToString();
    }

如果用戶在 combobox 中選擇了一個選項,則 selectedPrice int 會增加。 我正在嘗試刪除 previousItemCost 並且我無法理解如何找到先前選擇的用戶輸入。

我不太確定如何解決這個問題,我看到其他幾個人將新的 int 聲明為 -1 並將 SelectedIndex 設置為該值。 但我真的不明白那個解決方案。 如果有人能指出我正確的方向,那就太棒了。 此外,由於我來自 Unity 背景,因此我對 windows forms 還是很陌生。

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM