gpt4 book ai didi

c# - 使 ComboBox 只接受特定类型

转载 作者:行者123 更新时间:2023-11-30 16:10:26 25 4
gpt4 key购买 nike

我的 Windows 窗体应用程序中目前有一个 ComboBox。为了指定 ComboBox 将包含哪些值,我将 ComboBox 的 DataSource 属性设置为某个数组,以便 ComboBox 包含来自该数组的值。我还可以使用 Items.Add() 向 ComboBox 添加新值。但是,我想确保 ComboBox 可以填充某些特定类型的对象。所以,如果我有一个名为 X 的类,那么我想创建它以便只有 X 类型的数组可以用作 ComboBox 的数据源。现在,ComboBox 接受 System.Object 类型的对象。我怎样才能实现它?是否需要将 ComboBox 的属性设置为等于我的数据类型的名称?或者是否有一个事件会检查添加到我的 ComboBox 中的对象是否属于所需类型,如果不是则抛出异常?

我正在考虑创建一个新类作为 ComboBox 的子类型,并覆盖 Items 属性的 Add 方法,以便 Add 检查其参数是否符合要求类型(不确定我是否以及如何做)。即使我这样做了,还有其他方法可以将新值添加到 ComboBox(AddRangeCopyTo 等),所以我认为应该有一个更优雅的解决方案对这个问题。

最佳答案

如果你想控制 ComboBox 可以包含的项目类型,你可以尝试创建一个新的类派生形式 ComboBox,但是你会遇到问题是它仍然具有 ComboBox.ObjectCollection Items 属性,该属性仍然可以接受任何类型!并且(不幸的是你的覆盖想法)Add 方法不是虚拟的。

我能想到的唯一可行的解​​决方案是以某种方式抽象ComboBox。如果这不是共享代码,我建议您只创建一个方法,您可以使用该方法将项目添加到 ComboBox。像这样的东西:

// NOTE: All items that are added to comboBox1 need to be of type `SomeType`.
private void AddItemToComboBox(SomeType item)
{
comboBox1.Items.Add(item);
}

任何将非SomeType 对象添加到ComboBox 的尝试都会遇到编译器错误。不幸的是,没有简单的方法来阻止某人仍然将非 SomeType 项目直接添加到 ComboBox.Items

同样,如果这不是共享代码,那应该不是真正的问题。

关于c# - 使 ComboBox 只接受特定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25828239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com