web-dev-qa-db-ja.com

選択したアイテムをC#winformで1つのリストボックスから別のリストボックスに移動します

リストボックス1で選択したアイテムをリストボックス2に、またはその逆に移動しようとしています。 >><<の2つのボタンがあります。 listbox1でアイテムを選択し、>>をクリックすると、アイテムがlistbox1からlistbox2に移動するはずです。

private void MoveListBoxItems(ListBox source, ListBox destination)
{
    ListBox.SelectedObjectCollection sourceItems = source.SelectedItems;
    foreach (var item in sourceItems)
    {
        destination.Items.Add(item);
    }
    while (source.SelectedItems.Count > 0)
    {
        source.Items.Remove(source.SelectedItems[0]);
    }
}

private void button2_Click_1(object sender, EventArgs e)
{
    MoveListBoxItems(listbox , lstActivity);
}
9
user1770370

コードは正常に機能します。私はそれをテストしました。あなたの質問は「リストボックス1のアイテムをリストボックス2に移動しようとしています選択済み」です。

私はあなたのbutton2に問題があると思います。button2と以下のコードを削除してください

private void button2_Click_1(object sender, EventArgs e)
{
    MoveListBoxItems(listbox , lstActivity);
}

次に、他のボタンを作成し、クリックイベントを作成します。

完全なソース:

private void MoveListBoxItems(ListBox source, ListBox destination)
{
    ListBox.SelectedObjectCollection sourceItems = source.SelectedItems;
    foreach (var item in sourceItems)
    {
        destination.Items.Add(item);
    }
    while (source.SelectedItems.Count > 0)
    {
        source.Items.Remove(source.SelectedItems[0]);
    }
}

private void first2second_Click(object sender, EventArgs e)
{
    MoveListBoxItems(FirstListbox, LastListbox);
}

private void second2first_Click(object sender, EventArgs e)
{
    MoveListBoxItems(LastListbox, FirstListbox);
}

このコードは機能しています。複数のアイテムを選択する場合は、プロパティSelectionMode = MultiSimpleを変更します。

10
Habib Zare
private void buttonMoveToListBox1_Click(object sender, EventArgs e)
{
    if(listBox1.SelectedIndex != -1)
    {
        listBox2.Items.Add(listBox1.SelectedValue);
        listBox1.Items.Remove(listBox1.SelectedValue);
    }
}

private void buttonMoveToListBox2_Click(object sender, EventArgs e)
{
    if(listBox2.SelectedIndex != -1)
    {
        listBox1.Items.Add(listBox2.SelectedValue);
        listBox2.Items.Remove(listBox2.SelectedValue);
    }
}
2
Dave New

ここに2つのリストボックスがあります。左のリストボックスから名前を選択して[>>]ボタンをクリックすると、データは右のリストボックスに移動します

コード..currentItemText = LeftListBox.SelectedValue.ToString(); currentItemIndex = LeftListBox.SelectedIndex;

        RightListBox.Items.Add(currentItemText);
        if (myDataList != null)
        {
            myDataList.RemoveAt(currentItemIndex);
        }
        ApplyDataBinding(); 
0
Naeem

私はこのコードを使用して解決しました:

private void MoveListBoxItems(ListBox poSource, ListBox poDestination)
{
    while (poSource.SelectedItems.Count > 0)
    {
        poDestination.Items.Add(poSource.SelectedItems[0]);
        poSource.Items.Remove(poSource.SelectedItems[0]);
    }
}
0
Linkgold

削除されたすべての行で競合が発生するため、以下のコードを使用してください。

>>

     for (int intCount = ListBox1.SelectedItems.Count - 1; intCount >= 0; intCount--) 
     {
        ListBox2.Items.Add(ListBox1.SelectedItems[intCount]);
        ListBox1.Items.Remove(ListBox1.SelectedItems[intCount]);
     } 

<<

     for (int intCount = ListBox2.SelectedItems.Count - 1; intCount >= 0; intCount--)
     {
        ListBox1.Items.Add(ListBox2.SelectedItems[intCount]);
        ListBox2.Items.Remove(ListBox2.SelectedItems[intCount]);
     }     

上記のものが機能しない場合は、これを試してください:

while (ListBox1.SelectedItems.Count > 0) 
{ 
    ListBox2.Items.Add(ListBox1.SelectedItems[0].Text);  
    ListBox1.SelectedItems[0].Remove(); 
}

より多くの種類の回答については、これを使用できます link

0
Mr_Green