0

チェック リスト ボックスに項目を追加するボタンがあります。

private void btnDelivery_Click(object sender, EventArgs e)
{
    deliveryForm.deliverytrips = new DeliveryTrips();
    deliveryForm.ShowDialog();
    if (deliveryForm.deliverytrips != null)
    {
        DeliveryTrips newApp = deliveryForm.deliverytrips;
        theDelivery.addDeliveryTrip(newApp);
    }
    updateList();
}

private void updateList()
{
    clbSummary.Items.Clear();
    List<String> listOfDelivery = theDelivery.listDeliveryTrips();
    clbSummary.Items.AddRange(listOfDelivery.ToArray());
}

ボタンを使用して、チェックリスト ボックスに追加した内容を編集したり、チェック リスト ボックスから削除したりするにはどうすればよいですか?

ちょうど今、私はアイテムを編集するためにこれを持っています

        int index = clbSummary.SelectedIndex;



        DeliveryTrips selected = theDelivery.getDeliveryTrips(index);


        deliveryForm.deliverytrips = selected;



        deliveryForm.ShowDialog();


        updateList();

ただし、選択されていてチェックされていない場合にのみアイテムを編集します。削除ボタンと同じように、選択されていてチェックされていない場合にのみアイテムを削除します。

ありがとう

4

1 に答える 1

2

削除は簡単な部分です。リストが選択された単一の項目をサポートしている場合 ( SelectionMode One)、次のようなことができます。

private void DeleteButton_Click(object sender, EventArgs 
{
    clbSummary.Items.RemoveAt(clbSummary.SelectedIndex);
}

現在、複数選択をサポートしている場合 ( SelectionMode MultiSimple/ MultiExtended- CheckboxList ではなく標準リストで機能する)、次のコードは選択全体を削除します。

private void DeleteButton_Click(object sender, EventArgs e)
{
    for(int i = clbSummary.SelectedIndices.Count - 1; i >= 0; --i)
    {
        clbSummary.Items.RemoveAt(clbSummary.SelectedIndices[i]);
    }
}

ここで、順序を逆にすることが非常に重要です。そうしないと、アイテムの削除によってコンテンツがシフトし、アイテムclbSummaryを削除すればするほど、オフセットが大きくなります。

チェックした項目を削除したい場合も同じですが、CheckedIndices

private void DeleteButton_Click(object sender, EventArgs e)
{
    for (int i = clbSummary.CheckedIndices.Count - 1; i >= 0; --i)
    {
        clbSummary.Items.RemoveAt(clbSummary.CheckedIndices[i]);
    }
}

編集するには、アイテムのコンテンツを編集するためのフォームを作成することをお勧めします。または、それが文字列のみの場合は、単純な入力ダイアログで十分でしょう ( への参照をMicrosoft.VisualBasic使用して を使用して本当に単純化しましたInputBox)。通常、アイテムは文字列よりも複雑なオブジェクトに対応する可能性があるため、適切Editorな (アイテムを編集するために特別に作成されたフォーム) が必要になる場合があります。

private void EditButton_Click(object sender, EventArgs e)
{
    string content = clbSummary.SelectedItem.ToString();
    string newValue = Interaction.InputBox("Provide new value", "New Value", content, -1, -1);
    int selectedIndex = clbSummary.SelectedIndex;
    clbSummary.Items.RemoveAt(selectedIndex);
    clbSummary.Items.Insert(selectedIndex, newValue);
}
于 2012-11-22T16:50:11.093 に答える