webForumDet fria alternativet

Flytta värden från en Listbox till en annan

.NET

4 svar · 348 visningar · startad av mattiasjarnhall

Medlem sedan apr. 2001126 inlägg
Frågan#1

Alloha.. här igen..
Försöker mig på att köra följande kod:

Private Sub Button2_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ServerClick
    If Not (dlAllTechnicans.SelectedItem Is Nothing) Then
        Dim ListItem As ListItem
        For Each ListItem In dlAllTechnicans.Items
            If ListItem.Selected = True Then
                dlSelectedTechnicans.Items.Add(ListItem.Value.ToString)
                dlAllTechnicans.Items.Remove(ListItem.Value.ToString)
            End If
        Next
    End If
End Sub

Tanken är att jag flyttar de värden som är markerade i textbox1 till textbox2 och sen ta bort det markerade värdet i textbox1. Problemet är bara att jag får ett felmeddelande som lyder såhär:

Collection was modified; enumeration operation may not execute.

Hur skall jag lösa detta?

Medlem sedan apr. 20012 266 inlägg
#2

Jag hade ett liknande problem förut (ca 1år sedan. på vb.net tiden :) ), här är den tråden: http://www.webforum.nu/showthread.php?s=&threadid=45981

Medlem sedan maj 2001329 inlägg
#3

Renholm

Förstod inte riktigt hur det löste sig på den tråden (snart semester ju :r), men var det genom att lägga över alla värden att ta bort i en annan lista och sen ta bort dem ur den första listan?

Jag brukar alltid lösa såna här problem genom en for loop som loopar från count och ner till 0. Då kommer man inte att ta bort ett objekt som ligger före i listan och f*a upp den.

Medlem sedan apr. 20012 266 inlägg
#4

Det jag ville visa med tråden var att man ska kunna sätt ett form av lås på den så att man kan ta bort medan man loopar igenom den, har för mig att det var så iaf =)

Ett förslag på lösning som jag kom på nu är att man skulle kunna skapa en ArrayList där man slänger in alla värden i som man skall tabort/flytta och sedan loopar man igenom ArrayListen så man kan tabort/flytta värdena.

Medlem sedan mars 20002 836 inlägg
#5

Ett snabbt exempel, utan CB som funkar direkt som en .aspx-fil:

<%@ Page Language="VB" %>
<script runat="server">

    Public Sub Page_Load(Sender As Object, E As EventArgs)
        If (IsPostBack = False) Then
            Dim i As Integer
    
            '## -- populate left listbox --
            For i = 0 TO 9
                lboxLeft.Items.Add(New ListItem("Left " + i.ToString))
            Next i
    
            '## -- populate right listbox --
            For i = 0 TO 9
                lboxRight.Items.Add(New ListItem("Right " + i.ToString))
            Next i
        End If
    End Sub
    
    Sub btnMoveRight_Click(sender As Object, e As EventArgs)
        lboxRight.SelectedIndex = -1
        If (lboxLeft.SelectedIndex > -1) Then
            lboxRight.Items.Add(lboxLeft.Items(lboxLeft.SelectedIndex))
            lboxLeft.Items.Remove(lboxLeft.Items(lboxLeft.SelectedIndex))
        End If
        lboxLeft.SelectedIndex = -1
    End Sub
    
    Sub btnMoveLeft_Click(sender As Object, e As EventArgs)
        lboxLeft.SelectedIndex = -1
        If (lboxRight.SelectedIndex > -1) Then
            lboxLeft.Items.Add(lboxRight.Items(lboxRight.SelectedIndex))
            lboxRight.Items.Remove(lboxRight.Items(lboxRight.SelectedIndex))
        End If
        lboxRight.SelectedIndex = -1
    End Sub

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <table>
            <tbody>
                <tr>
                    <td>
                        <asp:ListBox id="lboxLeft" runat="server" Width="130px"></asp:ListBox>
                    </td>
                    <td>
                        <asp:Button id="btnMoveRight" onclick="btnMoveRight_Click" runat="server" Text=">>"></asp:Button>
                        <br />
                        <asp:Button id="btnMoveLeft" onclick="btnMoveLeft_Click" runat="server" Text="<<"></asp:Button>
                    </td>
                    <td>
                        <asp:ListBox id="lboxRight" runat="server" Width="130px"></asp:ListBox>
                    </td>
                </tr>
                <tr>
                    <td>
                    </td>
                    <td>
                    </td>
                    <td>
                    </td>
                </tr>
                <tr>
                    <td>
                    </td>
                    <td>
                    </td>
                    <td>
                    </td>
                </tr>
            </tbody>
        </table>
        <!-- Insert content here -->
    </form>
</body>
</html>

cya,
/PatrikB

256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)