【发布时间】:2013-04-24 01:30:57
【问题描述】:
解决以下问题的最佳方法是什么?
foreach (Control control in this.Controls)
{
if (control is ComboBox || control is TextBox)
{
ComboBox controlCombobox = control as ComboBox;
TextBox controlTextbox = control as TextBox;
AutoCompleteMode value = AutoCompleteMode.None;
if (controlCombobox != null)
{
value = controlCombobox.AutoCompleteMode;
}
else if (controlTextbox != null)
{
value = controlTextbox.AutoCompleteMode;
}
// ...
}
}
您会发现获取 AutoCompleteMode 属性已经足够复杂了。你可以假设我有一个 ComboBox 或一个 TextBox。
我的第一个想法是为 T 使用具有多种类型的泛型,但似乎这在 .NET 中是不可能的:
public string GetAutoCompleteModeProperty<T>(T control) where T: ComboBox, TextBox // this does not work, of course
遗憾的是,这两个控件没有共同的基类。
注意:这是一个更一般的问题,用于最小化示例。就我而言,我还想访问/操作其他 AutoComplete*-proprties(这两个控件也有共同点)。
感谢您的想法!
【问题讨论】:
-
Text 属性是您唯一追求的东西吗?
-
不,这是一个更笼统的问题。这只是一个最小化的例子。我也在使用 AutoComplete*-properties。 (我现在将这个添加到问题中)
-
你不需要外层吗?如果
controlCombobox为 null,则它不是 ComboBox 等。 -
.net 版本是什么?动态关键字可能会有所帮助
-
您可能希望通过获取 AutoComplete-* 属性来更新您的代码示例 - 尽管您进行了编辑,但许多人将 Text 属性归为您唯一想要的东西:)跨度>