【问题标题】:ListBox Selection keeps looping列表框选择不断循环
【发布时间】:2012-09-13 21:44:06
【问题描述】:

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

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;

    }

【问题讨论】:

  • “选择过程”是什么意思?
  • 当我从我的列表中选择一个项目时,该项目将被添加到另一个列表中。但这在上面的代码中发生了两次。
  • ServingList 上是否有任何事件处理程序?
  • 什么订阅了这个事件?
  • 是的,有。我只是将它粘贴在我的原始帖子中。

标签: c# listbox selection


【解决方案1】:

你正在造成一个无限循环。

你有你的列表框,改变它会导致一个动作

更改 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,即使它实际上已经设置了。

【讨论】:

  • 不一定是无限的;如果SelectedIndex 属性被合理地编程,它只会在值实际发生变化时调用changed 事件(在变为-1 后它不会)。这将与 OP 描述的行为相匹配,即在第一次分配 -1 之后再调用一次。
  • 我刚刚测试了这个方法,但是现在,由于某些原因,selectedIndex 从-1开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 2019-04-06
  • 2015-07-03
  • 1970-01-01
相关资源
最近更新 更多