2

私は、データを保持するために1つのリストボックスが必要なアプリケーションに取り組んでいます。

リストボックスからオブジェクトを削除するときに少し問題があります。この問題は、リストボックスに2つの別々のリストの項目を入力したときに発生します。

通常、オブジェクトを削除するには、そのインデックスを取得してから別のクラスのリストから削除し、リストボックスをリロードして変更を反映しますが、場合によっては、2つの異なるリストのオブジェクトをリストボックスに入力する必要があります。 2つのリストのいずれかから削除するオブジェクトの出所を特定しますが、これを行う方法が完全にはわかりません。

このコードは、リストボックスコントロールにデータを入力しています。//リストボックス内のすべてのアイテムをクリアしますViewListBox.Items.Clear();

        //create the lists
        List listOfPickups = visits.listPickups();
        List listOfdeliveries = visits.listDeliveries();
        //populate
        ViewListBox.Items.AddRange(listOfPickups.ToArray());
        ViewListBox.Items.AddRange(listOfdeliveries.ToArray());

これは、1つのリストからのみリストボックスをロードしているときに削除する方法です。

        if (ViewListBox.SelectedIndex < 0)
        {
            EditSelectBtn.Enabled = false;
            DeleteSelectBtn.Enabled = false;
        }
        else
        {
            if (MessageBox.Show("are you sure you want to delete the selected item?", "Are You Sure?", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                visits.removePickup(this.ViewListBox.SelectedIndex);
                //refresh listbox.
                updateList("pickups");
            }
            else
            {
                //clicked no so do nothing!
                ViewListBox.ClearSelected();
            }
        }

どんな助けでも大いに感謝されるでしょう。

4

1 に答える 1

2

選択した項目の種類を定義し、簡単な条件でリストから削除できます。また、インデックスで削除しても、ここでは役に立ちません。代わりにオブジェクト全体を渡す

object item = ViewListBox.SelectedItem;

if (item is Pickup)
    visits.removePickup(item);
else
    visits.removeDelivery(item);

アイテムが同じタイプの場合は、別の方法を使用してアイテムタイプを取得します(たとえば、いくつかのプロパティの値)。

更新1つのキャッチ-最初にピックアップアイテムを追加するため、長さと比較SelectedIndexすることでアイテムの出所を特定できます。listOfPickupsインデックスがピックアップ数よりも大きい場合は、配信を削除しています。選択したインデックスからピックアップカウントを差し引くと、削除する必要のある配達アイテムのインデックスが取得されます。

List<Pickup> listOfPickups = visits.listPickups();
List<Delivery> listOfdeliveries = visits.listDeliveries();
ViewListBox.Items.AddRange(listOfPickups.ToArray());
ViewListBox.Items.AddRange(listOfdeliveries.ToArray());
//...

if (ViewListBox.SelectedIndex < listOfPickups.Count)
{
   // this is a Pickup
   visits.removePickup(ViewListBox.SelectedIndex);
}
else
{
   // this is a delivery
   int deliveryIndex = ViewListBox.SelectedIndex - listOfPickups.Count;
   visits.removeDelivery(deliveryIndex);
}
于 2012-12-01T23:05:02.337 に答える