如何用“类型”填充组合框

本文关键字:填充 组合 类型 何用 | 更新日期: 2023-09-27 18:03:36

我正在为我的游戏创建一个编辑器,作为c#的windows窗体项目。在很多情况下,我想用父类的所有可能的派生类型填充组合框。例如,你要添加一个道具,所以你要从列表中选择"武器、盔甲、弹药、消耗品、货币等"。(这些都是从"item"派生的类)

目前,我手动为列表中的每个Type定义一个带有一个成员的enum,然后使用该enum填写组合框中的选项。然后我需要两个字典:一个从枚举到类型,另一个从类型到枚举。通过这种方式,我可以刷新组合框以显示选中项的类型,并且当组合框接受用户输入时,我可以用新实例化的项替换项。

这一切都很好,只是手动输入一个enum和两个字典,只是为了显示和选择代码库中已经存在的列表,这似乎是一段可怕的代码。

我怎样才能做得更好?

如何用“类型”填充组合框

您可以使用反射来获得Item的基本类型的所有类类型,并用该数据填充ComboBox;然后告诉它Type的哪个属性显示给用户(可能是Name)。

foreach (var item in Assembly.GetExecutingAssembly().GetTypes()
                             .Where(x => x.BaseType == typeof(Item)))
{
    comboBox1.Items.Add(item);
}
comboBox1.DisplayMember = "Name";