Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表框选择保持循环_C#_Listbox_Selection - Fatal编程技术网

C# 列表框选择保持循环

C# 列表框选择保持循环,c#,listbox,selection,C#,Listbox,Selection,当我从列表中选择一个项目时,整个选择过程将进行两次 private void serving_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e) { try { Debug.WriteLine("Serving added to diary"); login(null, null); } catch (WebException) {

当我从列表中选择一个项目时,整个选择过程将进行两次

private void serving_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
    try
    {
        Debug.WriteLine("Serving added to diary");
        login(null, null);
    }
    catch (WebException)
    {
        Debug.WriteLine(e.Error);
    }
    ServingList.SelectedIndex = -1;
}
当我省去ServingList.SelectedIndex=-1;这个过程只进行一次。但我需要将所选索引返回到-1

我错过了什么

SelectionChanged上的处理程序:

private void ServingList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Debug.WriteLine("\n[#] ServingList_SelectionChanged");
        Debug.WriteLine("Selected item:" + ServingList.SelectedIndex);
        Debug.WriteLine("ID of latest TP: " + tp.id);

        String itemid = tp.id;
        Produkt temp = (Produkt)ServingList.SelectedItem;

        if (servingid.Length < 1)
        {
            servingid = temp.servingid;
        }

        WebClient addserving = new WebClient();
        addserving.Credentials = new NetworkCredential(username.Text, passwort.Password);

        addserving.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
        addserving.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        addserving.UploadStringAsync(new Uri("http://fddb.info/api/v8/diary/add_item.xml?apikey=ICPOKUI83555PU43"), "&item_id=" + itemid + "&serving_id=" + servingid);
        addserving.UploadStringCompleted += new UploadStringCompletedEventHandler(serving_UploadStringCompleted);
        Pivot.SelectedIndex = 0;

    }

你造成了一个内循环

您有您的列表框,更改它会导致一个操作

更改X>动作X>手柄X>更改X-1>动作X

等等

对于一个条件,您需要某种形式的循环中断

private void serving_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e) 
{ 

     //Break condition
     if (ServingList.SelectedIndex != -1)
     {
        try 
        { 
            Debug.WriteLine("Serving added to diary"); 
            login(null, null); 
        } 
        catch (WebException) 
        { 
            Debug.WriteLine(e.Error); 
        } 
        ServingList.SelectedIndex = -1; 
     }
}

通过这样做,您只需在需要时将其设置为-1,否则即使已将所选索引设置为-1,它也会继续将其设置为-1。

选择过程是什么意思?当我从列表中选择一个项目时,该项目将添加到其他列表中。但是上面的代码会发生两次这种情况。ServingList上有任何事件处理程序吗?什么订阅了此事件?是的,有。我只是把它贴在我原来的帖子里。不一定是无限的;如果SelectedIndex属性已合理编程,则只有当值实际发生更改时(变为-1后不会发生更改),它才会调用更改的事件。这将与OP描述的行为相匹配,即第一次分配-1后只需再调用一次。我刚刚测试了此方法,但由于某些原因,selectedIndex从-1开始。