c# - 为什么组合框在创建时会加倍其项目?

标签 c# .net winforms data-binding combobox

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

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

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

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

为什么会这样?

最佳答案

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

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

附言

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

关于c# - 为什么组合框在创建时会加倍其项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53927091/

相关文章:

c# - 播放声音 : accessing length and position

c# - Winform Datagridview cellclick 错误 - 索引超出范围

c# - 如何从 C# 管理 IIS?

c# - 将 C# 控制台应用程序转换为 DLL

C# owin web api路由索引页面

.net - 我应该为动态网页使用哪个屏幕抓取工具?

c# - 使用 JSON.NET 反序列化字典

c# - 检测多个 Keyup/Keydown 事件并停止在每个 C#/VB.Net 上触发代码

c# - .NET 中用于故障测试的损坏数据集

c# - 如何在 ApiController 中检索 POST 正文数据?