c# - .NET 中的强类型控件

标签 c# .net winforms generics

我在 Windows 窗体应用程序上工作了很长一段时间,我真的发现自己在 GUI 代码中进行的类型转换比在底层业务代码中进行的类型转换要多。

如果您看到 ComboBox 控件接受一些模糊的“对象”作为它的项目,那么我的意思就很明显了。 然后你离开并可能显示一些 DisplayMember 和一个 ValueMember 等等。

如果我想稍后检索该值,我需要将我的对象类型转换回原来的样子。就像字符串获取值一样

string value = (string)combobox1.SelectedItem;

既然 Framework 中有泛型已经​​有一段时间了,我仍然想知道为什么标准工具箱中没有一个控件是泛型的。

我还发现自己一直在使用 ListViewItems 上的 .Tag 属性来保留显示的域对象。但每次我需要访问该对象时,我都需要另一个类型转换。

为什么我不能只用 ListViewItem 类型的项目创建 ComboBox 或 ListView

我是不是漏掉了什么,或者这只是又一个没有经过深思熟虑的控件的例子?

最佳答案

虽然对“未使用泛型”的批评不能公平地应用于在它们存在之前开发的控件......人们必须对 WPF 控件感到疑惑(.NET 3.0 中的新控件,在 .NET 2.0 中的泛型之后)。

我检查了 AddChild ComboBox 中的方法.它需要一个对象参数 (ugh)。

此控件旨在主要通过 XAML 使用。这样做是因为无法在 XAML 中指定类型参数吗? (另外,没有办法在 XAML 中指定类型参数吗?)

很抱歉没有明确的“为什么”答案,只是分享在使用 UI 时需要转换的常见痛苦。

关于c# - .NET 中的强类型控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/331357/

相关文章:

c# - 无法使用 Color.FromArgb 设置透明度(但 Color.Transparent 有效)

c# - 使用嵌套的 if/else 语句查找最多 3 个数字

c# - 在 C# 的文本文件中创建一个没有重复字符串条目的列表

.net - 汇集我的连接对我来说有多重要?

.net - 如何在Asp.net中使用HSL

c# - 选择粗体文本

C# throw 语句多余?

c# - Post请求为空(ASP.NET Core)

c# - 事件触发前的对象处理和垃圾收集

C# 如何禁用 webbrowser 使用