0

これで、lstStock と lstSupply の 2 つのリスト ボックスができました。lstSupply の構成要素

-Pen
-Pencil
-Staple
-Stapler
-Folder
-Notebook
-Eraser
-Marker

1つはbtnAddという名前のボタンで、もう1つはbtnRemoveという名前のボタンです。

btnAdd をクリックすると、lstSupply で選択したアイテムを lstStock に追加する必要があります。

    lstStock.Item.Add(lstSupply.SelectedItem);

lstSupply で同じアイテムを 2 回選択すると、lstStock に統合されます。たとえば、ペンを 2 回選択すると、リスト ボックスには、1 行にあるペンと別の行にある別のペンではなく、「ペン x 2」が表示されます。これは foreach を扱っているように感じましたが、それを使用する方法が本当にわかりません。

4

2 に答える 2

1

さて、まず第一に、あなたは何か他のものを保存する必要があるでしょうlstStock. 私はこのようなものを提案します:

public class StockItem {
    public string Name { get; set; }
    public int Count { get; set; }
}

.Items次に、ストックアイテムを保管する実際のコンテナとしてフィールドを使用しないことをお勧めします。代わりに、更新時にデータList<StockItem>を入力するために使用するものがあります。lstSupply

private List<StockItem> _items = new List<StockItem>();

次に、[追加]をクリックすると、次の2つのことを行います。

  1. 繰り返して_items、一致する供給の在庫アイテムがすでにあるかどうかを確認します。作成し、存在しない場合は追加します。

  2. で一致する在庫アイテムを見つけて、_itemsそのをインクリメントしCountます。

ToString()希望どおりに表示するために、StockItemクラスでオーバーライドできます。

public class StockItem {
    public string Name { get; set; }
    public int Count { get; set; }

    public override string ToString() {
        if (Count > 1)
            return Name + " x" + Count;
        return Name;
    } 
}

最後に、変更が加えられるたびに、次のように再入力するだけですlstStock

private void RefreshGui() {
    lstStock.Items.Clear();
    lstStock.Items.AddRange(_items.ToArray());
}

これについては他にもたくさんの方法がありますが、この簡単な演習では、これが私が行う方法だと思います。

于 2012-07-22T18:54:39.013 に答える
0

追加のコーディングなしでコードを機能させたい場合は、次のようにするだけです。

if (lstSupply.SelectedIndex > -1 && !lstStock.Items.Contains(lstSupply.SelectedItem))
        lstStock.Items.Add(lstSupply.SelectedItem);

このようにして、null アイテムを追加せず、各アイテムを最大 1 回追加することを確実にします。

于 2012-07-22T21:12:16.197 に答える