首页 > 解决方案 > 为什么组合框在创建时会加倍其项目?

问题描述

我正在以编程方式创建一个组合框,如下所示:

var cbo = new ComboBox();
cbo.HandleCreated += (s, e) =>
{
    cbo.DataSource = mylist;
};

当我执行上述操作时,组合框会显示列表中包含的项目的两倍。但是,当我执行以下操作时,组合框会显示正确的项目数:

var cbo = new ComboBox() {
    DataSource = mylist
};

为什么会这样?

标签: c#.netwinformsdata-bindingcombobox

解决方案


此代码复制了记录,因为在您初始化组合框时,它将触发事件HandleCreated,这会将您的列表添加到组合框。然后在完成初始化后,代码的执行将再次触发事件HandleCreated,因为执行该事件的第一个来自初始化,第二个来自运行时执行本身。

var cbo = new ComboBox(); //initialization
//below this comment is the event
    cbo.HandleCreated += (s, e) =>
    {
        cbo.DataSource = mylist;
    };

附言

在 C# WinForms 中填充组合框有更好的方法;每个控件(组合框、文本框等)都有其不同的事件。您可以先检查一下,而不是创建您的活动。


推荐阅读