【发布时间】:2014-09-13 22:13:53
【问题描述】:
我目前在我的 Windows 窗体应用程序中有一个 ComboBox。为了指定 ComboBox 将包含哪些值,我将 ComboBox 的 DataSource 属性设置为某个数组,以便 ComboBox 包含该数组中的值。我还可以使用Items.Add() 向 ComboBox 添加新值。但是,我想确保 ComboBox 可以填充某些特定类型的对象。因此,如果我有一个名为 X 的类,那么我想使它只有 X 类型的数组可以用作 ComboBox 的数据源。现在,ComboBox 接受 System.Object 类型的对象。我怎样才能实现它?我需要将 ComboBox 的属性设置为等于我的数据类型的名称吗?或者是否有一个事件会检查添加到我的 ComboBox 的对象是否属于所需类型,如果不是则抛出异常?
我正在考虑创建一个新类作为 ComboBox 的子类型,并覆盖 Items 属性的 Add 方法,以便 Add 检查其参数是否为所需类型(不确定是否以及如何执行它)。即使我这样做了,还有其他方法可以将新值添加到 ComboBox 中(AddRange、CopyTo 等),所以我认为应该有一个更优雅的解决方案来解决这个问题。
【问题讨论】:
-
您想要的想法是可能的,但您想由我们中的某个人完成?请尝试构建此组合框,如果遇到问题,请在此之后编写。
-
@mybirthname - 不,我只是想知道是否应该重写 ComboBox.ObjectCollection 的 Add 方法,或者是否有更优雅的方法来执行此操作,因为从技术上讲,我还需要重写其他方法可以向 ComboBox 添加新值的方法,例如 AddRange。
-
您不能隐藏或覆盖
Items以仅 接受您的新类型,即使您从它继承;但您可以尝试将其包装在 UserControl 中并公开一个新项目集合。虽然会有很多代码来模拟/模仿现有的属性和集合。当然,CBo 已经接受了您的特定类型,而不仅仅是仅该类型 -
我问只是因为我的好奇。为什么需要防止使用其他类型的
combobox?如果你对combobox事件中的项目做一些事情,那么你可以在你使用的每个事件处理程序中添加项目类型的检查......或者为这个控件命名为“ComboBoxOfMyType”,然后其他程序员会注意到这个组合框使用了一些类型。 -
@Fabio - 这是一个家庭作业,所以我必须这样做。您甚至提到了处理程序-每次将某些内容添加到 ComboBox 的项目时都会触发一个事件吗?如果是,那么我可以编写一个事件处理程序,当它看到 ComboBox.Items 中存在不正确类型的对象时将引发异常。